Hogyan kezdjek AVR-re programozni?
Korábban már szerettem volna megtanulni AVR-re programozni, és akkoriban kaptam is egy Atmega8A típusú IC-t.
Van arduinom, amire már kiírtam az égetőt ez alapján:
Bár még nem tudom, hogyan kell használni, de szeretném elkezdeni tanulni a programozást :D
Az atmel studiot töltöttem le az égetéshez, és a programom megírásához.
Korábban már írtam C és C++ programokan windows-on, és arduino-val is foglalkoztam, így az alapok már meg vannak.
Kezdetnek egy LED villogtatást szeretnék megvalósítani. Az lenne a kérdésem, hogy tudtok-e segíteni ebben, mit és hova kössek, illetve a program kódban hogyan tudom a LED-et ki és bekapcsolni?
Az AVR-nek a legfontosabb komponense a ki- és bemeneti lábai. Ezek különféle "csoportokra" vannak osztva, tehát van A-csoport, B-csoport, C-csoport és D-csoport. Ezeket a lábakat két nagyon fontos regiszterrel tudod kezelni:
1) A DDRx (ahol x a csoport neve) regiszter dönti el, hogy az adott lábak ki- vagy bemeneti lábak-e. Minden lábhoz tartozik egy bit, aminek ha értéke 1, a láb kimenet, ha pedig 0, akkor bemenet.
2) A PORTx (ahol x a csoport neve) regiszterrel tudsz írni a lábra és olvasni a lábról, függően attól, hogy a DDRx-ben az adott lábat hogyan állítottad be.
Például, ha be akarod állítani azt, hogy a B lábcsoport 2-es lába kimenet legyen:
DDRB |= 1 << PINB2;
Láthatod, hogy a C nyelv bitműveleteivel nem árt tisztában lenni, mert itt kőkeményen használni fogjuk.
Ha 5V-ot akarsz tenni a lábra:
PORTB |= 1 << PINB2;
Ha földre akarod húzni:
PORTB &= ~(1 << PINB2);
És akkor a teljes program így néz ki:
#include <avr/io.h>
#include <util/delay.h>
void m_delay_10ms(unsigned char val) {
//a _delay_ms max 65.535 ms-et képes sleepelni,
// tehát nagyobb időzítést többől lehet "összerakni"
.. unsigned char i;
.. for(i=0;i<val;i++) {
.. .. _delay_ms(10);
.. }
}
int main() {
.. DDRB = (1<<PINB2);
.. PORTB = (1<<PINB2);
.. while(1) {
.. .. PORTB |= 1 << PINB2;
.. .. m_delay_10ms(100); //100*10ms = 1s
.. .. PORTB &= ~(1 << PINB2);
.. .. m_delay_10ms(100);
.. }
.. return 0;
}
Köszönöm a választ.
Sajnos nem tudtam rendesen összekötni az IC-met az arduinoval, ezért nem tudtam ráírni a programot, de ha megérkezik az új ISP-m, újra próbálom :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!