Kezdőoldal » Számítástechnika » Programozás » Hogyan kezdjek AVR-re programo...

Elektromann kérdése:

Hogyan kezdjek AVR-re programozni?

Figyelt kérdés

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:

[link]


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?



2019. márc. 15. 17:46
 1/2 anonim ***** válasza:
27%

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;

}

2019. márc. 15. 20:09
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:

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 :)

2019. márc. 20. 17:56

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!