Sommario:

Iniziare con Bascom AVR: 5 passaggi
Iniziare con Bascom AVR: 5 passaggi

Video: Iniziare con Bascom AVR: 5 passaggi

Video: Iniziare con Bascom AVR: 5 passaggi
Video: 10 steps to start AVR microcontrollers 2024, Dicembre
Anonim
Iniziare con Bascom AVR
Iniziare con Bascom AVR

Questo è l'inizio di una serie per insegnarti a programmare il tuo microcontrollore AVR con Bascom AVR.

Perché lo sto facendo.

La maggior parte degli esempi di programma di questa serie possono essere realizzati con Arduino.

Alcuni più facili e altri più difficili, ma alla fine entrambi verranno eseguiti sullo stesso controller.

Ma il modo di programmare è diverso in ogni ambiente di sviluppo. Arduino ha bisogno di una libreria per tutto tranne che per le funzioni di base. Bascom funziona anche con le librerie, ma raramente devo includerne una. Con Arduino, tutte le impostazioni specifiche dell'hardware vengono eseguite tramite le librerie. hai pochissima influenza sulla potenza effettiva del microcontrollore. A partire dai timer di cui dispone il controller. con arduino hai di nuovo bisogno di una libreria. se hai il timer finché non funziona, potrebbe essere un'altra libreria che si scontra con le tue impostazioni. Su bascom hai libero accesso all'hardware completo incluso il settore di avvio che è occupato da arduino. per esempio, alcune librerie di bascom ti chiedono quale timer vuoi usare. d'altra parte, poiché arduino rende molto facile creare una libreria da soli, lo rende naturalmente una piattaforma in cui il nuovo hardware e i sensori di solito hanno una libreria direttamente. ciò che è spesso associato a molte ricerche presso bascom e le funzioni che normalmente una libreria dovrebbe assumere devono essere poi accuratamente incorporate nel codice del programma. ma buone notizie anche la comunità bascom è molto grande ed è per questo che c'è una soluzione per ogni idea.

Quindi dipende in parte dal progetto cosa viene utilizzato per un ambiente di sviluppo e in parte dal know-how della persona di programmazione.

ma perché sto facendo questa serie. da un lato si risparmia molto. Non devo acquistare una scheda arduino per ogni progetto. Ad esempio: Un Arduino uno noname costa circa 12 € il controller che c'è sopra costa solo 2,5 € con la circuiteria minima necessaria per una funzione stabile, costa circa 4 €. d'altra parte hai a disposizione la selezione completa di chip avr supportati. atmegas da 8 a 256 e attiny da 8 a 2313 e molti tipi xmega di cui non ho esperienza. Se vuoi solo usare un servo e un sensore a ultrasuoni in grado di riconoscere una mano, ad esempio, e quindi aprire il coperchio di un bidone della spazzatura, puoi usare il chip più piccolo possibile. Quindi ci sono molte ragioni per imparare una seconda lingua.

Quindi iniziamo

Forniture

Questo è un elenco delle parti minime richieste per il funzionamento stabile del chip e la programmazione.

Tagliere per test

Atmega 8-16PU (meglio comprarne 2 o 3 se li uccidi per errore)

7805 Regolatore di tensione 5V

Resistenza da 10Kohm

Condensatore a film da 100nF

Condensatore elettrolitico da 10µF

Condensatore elettrolitico da 100µF

alcuni fili per breadboard

PC Windows 7/8/8.1/10

Programmatore ISP (userò qui l'USBasp che puoi acquistare su amazon per pochi soldi)

Bascom AVR (puoi scaricare qui una DEMO. Tutte le funzioni sono sbloccate, ma puoi scrivere codice solo fino a una dimensione di 4Kb che è sufficiente per molto codice).

Parti opzionali:

LED con resistori

interruttori a pressione

parti specifiche del progetto

Passaggio 1: installazione di Bascom e configurazione

Installazione di Bascom e configurazione
Installazione di Bascom e configurazione
Installazione di Bascom e configurazione
Installazione di Bascom e configurazione
Installazione di Bascom e configurazione
Installazione di Bascom e configurazione

Scarica il file e installa Bascom AVR. Installa tutte le sue parti inclusa l'ultima casella di controllo dopo l'installazione.

Dopodiché riavvia il PC, altrimenti bascom non si avvierà.

Dopo il riavvio avvia bascom.

Vai su Opzioni -> Programmatore e scegli USBasp dall'elenco, salva le impostazioni e chiudi Bascom.

Usa questo programma per installare usbasp. Successivamente, riavvia nuovamente il PC. Ora collega l'USBasp al tuo PC e avvia il gestore dei dispositivi. USBasp dovrebbe apparire sui dispositivi libusb.

Stat Bascom di nuovo e crea un nuovo file. Salvalo sul tuo PC e premi il tasto F7 sulla tastiera.

Il compilatore si avvia e compila il programma vuoto. Ora puoi testare la funzionalità del programmatore.

Premi il pulsante F4 sulla tastiera per avviare la finestra del programmatore. Ora vai su chip -> identifica per avviare un'interazione. I LED di USBasp dovrebbero ora lampeggiare brevemente. Dovresti ricevere un messaggio del tipo ID chip FFFFFF Impossibile leggere il dispositivo. Questo è un buon segno che il programmatore sta funzionando ma non ha trovato alcun chip.

Ora possiamo iniziare a costruire il primo circuito.

Passaggio 2: diamo un'occhiata più da vicino al chip

Diamo un'occhiata più da vicino al chip
Diamo un'occhiata più da vicino al chip

Se guardi il pinout del chip sembra che il chip non abbia alcuna somiglianza con la scheda arduino. Certo, usiamo un Atmega8 e su Arduino uno c'è un Atmega328. Ma il Pinout è quasi lo stesso, ma il chip della scheda Arduino Uno ha più funzioni. Qui i nomi dei pin. VCC e GND sono i pin per l'alimentazione.

AREF e AVCC sono pin per la tensione di riferimento e l'alimentazione per il convertitore analogico-digitale.

PB 0-7 PC 0-6 PD 0-7 sono pin di input output per uso generico con occupazione multipla.

reset pin è quello che dice il nome. Per riavviare il chip. La riga sopra il nome del reset significa negazione. Ciò significa che per ripristinare il chip devi abbassarlo a 0V.

Per i seguenti pin presto saranno disponibili istruzioni separate.

RXD TXD sono pin hardware per la comunicazione seriale UART.

INT0 INT1 sono pin di interruzione hardware

XCK /T0 UART Sorgente orologio / Timer/Contatore0 Sorgente orologio

I pin XTAL /TOSC sono per un cristallo esterno fino a 16 MHz (diversi modelli fino a 20 MHz) / I pin Crystal per un RTC interno

T1 è simile a T0

I pin AIN sono per il comparatore analogico

ICP1 è simile a T0/T1

OC1A è il pin di uscita hardware per il canale A del timer pwm1

Pin di selezione del chip SS/OC2 per SPI/come OC1B ma canale B

MOSI MISO SCK/OC2 sono i pin hardware SPI e i pin per la programmazione / timer di uscita PWM2

Da ADC0 a ADC5 sono gli ingressi analogici

SDA SCL sono i Pin per l'hardware I2C

Il normale chip può funzionare da 4, 5V a 5, 5V, l'Atmega 8L può funzionare con una tensione molto più bassa.

Vedete, anche questo chip può fare più di quanto un Arduino Uno sembra non poter fare. Ma anche Arduino può farlo, devi solo programmarlo.

Passaggio 3: il primo circuito

Il primo circuito
Il primo circuito
Il primo circuito
Il primo circuito

Ora è il momento di costruire il tuo primo circuito.

Qual è in genere il primo circuito? Destra! Facciamo lampeggiare un LED.

Il LED è collegato con PB0. Il resistore vicino al chip ha 10k Ohm.

La resistenza accanto al LED ha 470 Ohm.

Ora puoi collegare l'USBasp con l'Atmega come mostrato nell'immagine.

Ma prima di accendere, scriviamo il programma.

Passaggio 4: scrivere il primo programma

Scrivi il primo programma
Scrivi il primo programma

Crea un nuovo file in Bascom e digita il testo seguente.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = output do portb.0 = 1 wait 1 portb.0 = 0 wait 1 loop

dopodiché compilalo premendo F7 sulla tastiera.

Ora possiamo programmare il chip premendo F4. Viene visualizzata la finestra del programmatore. Ora è il momento di accendere l'alimentazione dalla breadboard. Dovresti applicare qualcosa tra 6 e 12 Volt.

Ora vai su chip -> autoprogramma. Se la finestra del programmatore si chiude automaticamente la programmazione è andata a buon fine.

Il LED dovrebbe lampeggiare con una frequenza di un secondo.

Ora dai un'occhiata più da vicino al programma per capire la sintassi.

$regfile "m8def.dat"

$cristallo = 1000000

con $regfile diciamo al compilatore il tipo di chip utilizzato il nome del chip Arduino sarebbe "m328pdef.dat"

con $crystal gli diciamo la velocità della cpu di circa 1MHz.

config portb.0 = Uscita

ciò significa che PB0 dovrebbe fungere da output.

A proposito, l'abbreviazione PB0 significa porta B bit 0. Il chip è diviso in diverse porte. Ad ogni porta viene assegnata una lettera per una chiara identificazione. e ogni portpin un po' da 0 a 7. Ad esempio, posso scrivere un byte completo nel registro di uscita della porta, che verrà emesso tramite i singoli pin della porta.

fare

ciclo continuo

Questo è ciò che in Arduino significa l'istruzione void loop. Tutto tra quei due comandi si ripeterà per sempre. (con alcune eccezioni ma in seguito ne parleremo più avanti)

Porta.0 = 1

aspetta 1 portab.0 = 0 aspetta 1

Qui generiamo il lampeggio del led.

Portb.0 = 1 dice al chip di commutare l'uscita PB0 a 5V

il comando wait 1 fa aspettare il chip per un secondo. Se vuoi cambiare il led più velocemente devi sostituire il comando wait con waitms ora puoi inserire un po 'di tempo ora in millisecondi, ad es. waitms 500. (waitus significa attendere in nanosecondi)

Portb.0 = 0 dice al chip di commutare l'uscita PB0 a 0V.

Passaggio 5: aggiungi un pulsante per utilizzare gli input

Aggiungi un pulsante per utilizzare gli input
Aggiungi un pulsante per utilizzare gli input

Ora aggiungiamo un pulsante per accendere il led se il pulsante viene premuto.

Inserire il pulsante come mostrato nell'immagine.

ora digita il programma follow.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 do se pind.7 = 0 allora portb.0 = 1 altrimenti portb.0 = 0 loop

Se carichi quel programma sul chip, il led si accende solo quando viene premuto il pulsante. Ma perché?

il programma inizia in modo identico all'ultimo fino a

config portd.7 = input. Ciò significa che il pin PD7 collegato al pulsante funge da ingresso.

Portd.7 = 1 non commuta il pin in alto, ma attiva la resistenza di pull up interna dell'Atmega.

L'istruzione if sembra un po' strana se sei abituato ad arduino.

se usi l'istruzione if devi usare l'istruzione "then". In questo esempio l'istruzione if viene utilizzata per operazioni di comando singolo. Se vuoi usare più comandi devi scriverlo così.

se pind.7=0 allora

portb.0=1 un po' di codice un po' di codice un po' di codice altro portb.0 = 0 end if

per questo uso dell'istruzione if devi usare l'istruzione "end if" alla fine.

ciò che è ancora importante. Forse l'hai già visto. gli input non vengono interrogati con portx.x, ma con pinx.x. Puoi ricordarlo facilmente. Le uscite hanno la "o" (porta) nella parola e gli ingressi hanno la "i" (pin).

Ora è il tuo turno di giocare un po'.

La mia prossima istruzione arriverà presto (dichiarazioni standard come while, select case, for e variable).

Se ti piace il mio istruibile e vuoi di più dimmelo nei commenti.

Consigliato: