Poradnik programowania procesorów AVR na przykładzie ATMEGA8

background image

Poradnik programowania procesorów AVR

na przykładzie ATMEGA8

Wersja 1.0

Tomasz Pachołek

2017-13-03

Opracowanie zawiera opis podstawowych procedur, funkcji, operatorów w języku C dla
mikrokontrolerów AVR oraz opis podstawowych działań na pinach i portach, potrzebnych do
zaprogramowania prostych układów opartych o procesor ATMEGA8. Autor nie ponosi
odpowiedzialności za nieprawidłowe działanie kodu lub uszkodzenie sprzętu.

background image

Copyright Tomasz Pachołek

Strona 2 z 11

Spis treści

1.

TYPY ............................................................................................................................................3

2.

OPERATORY ................................................................................................................................3

3.

Tablice prawdy: ...........................................................................................................................4

4.

Tablice przesunięć bitowych: .......................................................................................................4

5.

INSTRUKCJE: ................................................................................................................................5

6.

PROGRAMOWANIE AVR –ATMEGA8 ...........................................................................................6

7.

OPIS WYPROWADZEŃ PINÓW ATMEGA 8 ....................................................................................8

8.

OPIS WYPROWADZEŃ PINÓW - KANDA AVR .............................................................................. 10

9.

OPIS WYPROWADZEŃ PINÓW – LCD HD44780 .......................................................................... 10

LITERATURA ...................................................................................................................................... 11

background image

Copyright Tomasz Pachołek

Strona 3 z 11

1. TYPY

TYPY ZMIENNYCH i STAŁYCH
bool

0 lub 1

Logiczny

int

Np. 15

Całkowita

float

Np. 3.14

Zmiennoprzecinkowa

double

Zmiennoprzecinkowa podwójnej
precyzji(więcej miejsc po
przecinku)

char

*, ; , a

Znakowy(znaki z tablicy ASCII)

uint8_t

Int: 0, 1,2,3

8 bitowy int(zajmuje mniej
miejsca w pamięci

MODYFIKATORY
const

const int c

Stałe

signed

signed char c

Liczba ze znakiem (-127 do 127
dla char)

unsigned

unsigned char c

Liczba bez znaku (0 do 255 dla
char)

volatile

Volatile float c

Ulotny (stosowane dla
przycisków, zmienna nie jest
optymalizowana przez kompilator

register

register int c

Umieszczenie w rejestrze
szybkiego dostępu

extern

Ex tern wyswietl()

poinformowanie kompilatora, by
nie szukał danej zmiennej/funkcji
globalnej w aktualnym pliku

2. OPERATORY

ARYTMETYCZNE

=

a = 5

Przypisanie

*

a * 2

Mnożenie

/

a / 2

Dzielenie całkowite (5/2=2)

%

a % 2

Reszta z dzielenia całkowitego (5%2=1)

+=

a += 5

Skrócony zapis a = a + 5

-=

a -= 5

Skrócony zapis a = a - 5

RZUTOWANIE

int i = 42.7;

Konwersja z double na int

float f = i;

Konwersja z int do float

BINARNE

~

Negacja(NOT)

&

Koniunkcja(AND)

|

Alternatywa(OR)

^

Alternatywa rozłączna(XOR)

PRZESUNIĘCIA BITOWE

<<

a<<1

Przesunięcie bitowe w lewo

>>

a>>1

Przesunięcie bitowe w prawo

PORÓWNIANIA

==

Równe

!=

Różne

background image

Copyright Tomasz Pachołek

Strona 4 z 11

<

Mniejsze

>

Większe

<=

Mniejsze lub równe

>=

Większe lub równe

LOGICZNE

!

Negacja

&&

Koniunkcja

||

alternatywa

&=

a &= 3 a=a&3

|=

a |= 3 a=a|3

^=

a ^= 3 a=a^3

^działają do nich tablice prawdy^

3. Tablice prawdy:

~

a

Wynik

0

1

1

0

&

a

b

Wynik

0

0

0

0

1

0

1

0

0

1

1

1

|

a

b

Wynik

0

0

0

0

1

1

1

0

1

1

1

1

^

a

b

Wynik

0

0

0

0

1

1

1

0

1

1

1

0

Przykład: dla a= 0 i b = 1 operacja: a & b =0

4. Tablice przesunięć bitowych:

a

a << 1

a<<2

0001

0010

0100

0011

0110

1100

0101

1010

0100

1000

0000

0000

1111

1110

1100

1001

0010

0100

background image

Copyright Tomasz Pachołek

Strona 5 z 11

a

a>>1

a>>2

0001

0000

0000

0011

0001

0000

0101

0010

0001

1000

1100

1110

1111

1111

1111

1001

1100

1110

5. INSTRUKCJE:

if

if (wyrażenie) {
/* blok wykonany, jeśli
wyrażenie jest prawdziwe */
}
/* dalsze instrukcje */

Warunkowa (na tak)

If else

if (wyrażenie) {
/* blok wykonany, jeśli
wyrażenie jest prawdziwe */
}
else {
/* blok wykonany, jeśli
wyrażenie jest nieprawdziwe */
}
/* dalsze instrukcje */

Warunkowa(na tak i na nie)

switch

switch (wyrażenie) {
case wartość1: /* instrukcje,
jeśli wyrażenie == wartość1 */
break;
case wartość2: /* instrukcje,
jeśli wyrażenie == wartość2 */
break;
/* ... */
default: /* instrukcje, jeśli
żaden z wcześniejszych
warunków nie został spełniony
*/
break;
}

Wielokrotnego wyboru

While

while (warunek) {
/* instrukcje do wykonania w
pętli */
}
/* dalsze instrukcje */

Pętla – wykonuje się tak długo,
jak warunek jest PRAWDZIWY

for

for (wyrażenie1; wyrażenie2;
wyrażenie3) {
/* instrukcje do wykonania w
pętli */
}
/* dalsze instrukcje */

Pętla– wykonuje się tak długo,
jak warunek jest PRAWDZIWY
Wyrażenie 1- ustawienie
zmiennej sterującej pętlą(i=1)
Wyrażenie 2 – sprawdzany
warunek, jeżeli prawdziwy

background image

Copyright Tomasz Pachołek

Strona 6 z 11

pętla się wykona
Wyrażenie 3 – wyrażenie
wykonywane co każde
wykonanie pętli(i++)

do.. while

do {
/* instrukcje do wykonania w
pętli */
} while (warunek);
/* dalsze instrukcje */

Pętla, której kod wykona się
zawsze przynajmniej jeden raz.
Wykonuje się tak długo, jak
warunek jest PRAWDZIWY

break

Opuszczenie pętli w dowolnym
momencie programu

#include

#include <avr/io.h>

Dołączanie bibliotek/plików

#define

#define LED_PIN (1<<PC7)

Przypisanie nazwy do
instrukcji/portu/pinu

6. PROGRAMOWANIE AVR –ATMEGA8

PORTY I PINY

DDRx

Rejestr kierunku pinów/portu

PORTx

Rejestr WYJŚCIOWY

PINx

Rejestr WEJŚCIOWY

DDRx |= (1<<PD1)

Ustalenie kierunku WYJŚCIOWEGO
portu

Zamiast x podajemy A,B,C,D

DDR=0xFF

Ustalenie kierunku WYJŚCIOWEGO
portu na wszystkich pinach portu

PORTD |= (1<<PD1)

Stan WYSOKI na wyjście PD1

PORTD =0xFF

Stan WYSOKI na wszystkich wyjściach
portu

PORTD &= ~(1<<PD2)

Stan NISKI na wyjście PD2

DDRx &= ~(1<<PD0)

Ustalenie kierunku WEJŚCIOWEGO
portu

Zamiast PD0 podajemy numer
pinu

PORTD |=(1<<PD0)

Podciągnięcie programowe
wewnętrznym rezystorem do VCC

If( !(PIND & (1<<PD0))
LED_ON
else LED_OFF;

Jeżeli pin zwarty do masy wykonaj
LED_ON, jeżeli nie zwarty wykonaj
LED_OFF

Po włączeniu programowego
podciągnięcia do VCC pin
sterowany jest zwarciem do masy

PWM

DDRB |= (1<<PB1);

TCCR1A |= (1<<WGM10);
TCCR1B |= (1<<WGM12);

Fast PWM 8bit - tryb PWM wybrany z noty
katalogowej atmega8

TCCR1A |= (1<<COM1A1)|(1<<COM1B1) ;

Tryb wyjścia – na początku wystawiany jest
stan wysoki, a po odliczeniu zadanej wartości
licznika sterującego PWM następuje stan niski.

TCCR1B |= (1<<CS10)|(1<<CS11); //64
TCCR1B |= (1<<CS11); //8
TCCR1B |= (1<<CS10); //1

Preskaler
=64 Przy taktowaniu atmegi 1MHz f

pwm

=61Hz

= 8 Przy taktowaniu atmegi 1MHz f

pwm

=488Hz

background image

Copyright Tomasz Pachołek

Strona 7 z 11

= 1 Przy taktowaniu atmegi 1MHz f

pwm

=3,9kHz

Wzór: f=f

taktowania

/Prescaler/256

256 to pojemność rejestru, zależy od ilości
bitów : 2

8

=256

OCR1A = 0;

Zmienna sterująca licznikiem PWM – przy
8bitach maksymalna wartość to 255 – sygnał
będzie wypełniony maksymalnie(ciągły stan
wysoki)

ADC

ADCSRA = (1<<ADEN)

|(1<<ADPS0)

|(1<<ADPS1)

|(1<<ADPS2);

ADEN=1 włączenie przetwornika ADC
ADPS - ustawienie preskalera, tu na 128

ADMUX = (1<<REFS1) |(1<<REFS0)
|(1<<MUX2)
|(1<<MUX0);

REFS - wybór napięcia odniesienia, tu
wewnętrzne źródło 2,56V z koniecznością
podłączenia zewnętrznego kondensatora na
pinie AREF
MUX - wybór kanału ADC5 na pinie PC5

DDRC &=~ (1<<PC5);

Ustawienie Wejścia ADC

ADCSRA |= (1<<ADSC);

Uruchomienie pojedynczej konwersji

while(ADCSRA & (1<<ADSC));

Oczekiwanie na zakończenie konwersji
przetwornika

wynik_float = (ADC * Vref) /1024;

Przeliczenie odczytu na jednostki w woltach

Ustawienie rejestrów MUX dla poszczególnych kanałów pomiarowych(wybranego pinu z którego
wykonywany jest pomiar:

Rejestr

Numer kanału

M

UX

3

M

U

X

2

M

U

X

1

M

U

X

0

0

0

0

0

ADC0(PC0)

0

0

0

1

ADC1(PC1)

0

0

1

0

ADC2(PC2)

0

0

1

1

ADC3(PC3)

0

1

0

0

ADC4(PC4)

0

1

0

1

ADC5(PC5)

0

1

1

0

ADC6(tylko w smd)

0

1

1

1

ADC7(tylko w smd)

background image

Copyright Tomasz Pachołek

Strona 8 z 11

7. OPIS WYPROWADZEŃ PINÓW ATMEGA 8

Rysunek 1 Atmega8 w wersji przewlekanej(THT)

Rysunek 2Atmega8 w wersji powierzchniowej(SMD)

background image

Copyright Tomasz Pachołek

Strona 9 z 11

Rysunek 3 Minimalne podłączenie zasilania procesora ATMEGA8

Rysunek 4 Zalecane podłączenie zasilania procesora ATMEGA8

background image

Copyright Tomasz Pachołek

Strona 10 z 11

8. OPIS WYPROWADZEŃ PINÓW - KANDA AVR

Rysunek 5 Złącze do programowania (Kanda)

9. OPIS WYPROWADZEŃ PINÓW – LCD HD44780

Rysunek 6 Opis wyprowadzeń pinów wyświetlacza LCD HD44780

background image

Copyright Tomasz Pachołek

Strona 11 z 11

LITERATURA

http://mikrokontrolery.blogspot.com

https://pl.wikibooks.org/wiki/C

http://forbot.pl

Nota katalogowa układu Atmega8 wydanie 09.2015r.

http://radzio.dxp.pl

Nota katalogowa układu rejestru przesuwnego74HC595 wydanie 02.2016r.


Wyszukiwarka

Podobne podstrony:
II Rok Przedsiębiorczość Analiza procesu przedsiebiorczosci na przykladzie przedsiebiorstwa
MODELOWANIE PROCESÓW LOGISTYCZNYCH NA PRZYKŁADZIE SYSTEMU ZAOPATRYWANIA WOJSK W AMUNICJĘ
II Rok Przedsiębiorczość Analiza procesu przedsiebiorczosci na przykladzie przedsiebiorstwax
Proces decyzyjny na przykladzie wybranej organizacji
Programowanie sterowników PLC na przykładzie Sterownika Twido firmy Schneider
Instrukcja do ćw 04 Wizualizacja procesów przemysłowych na przykładzie dydaktycznego stanowiska MPS
PROCESY LOGISTYCZNE NA PRZYKŁADZIE FIRMY
13 Projektowanie układów sekwencyjnych procesowo–zależnych o programach liniowych na przykładzie uk
KSZTAŁTOWANIE PROCESÓW W OBSZARZE DYSTRYBUCJI NA PRZYKŁADZIE BROWARU XYZ
CUDA w przykladach Wprowadzenie do ogolnego programowania procesorow GPU cudawp
reguła newmana na przykładzie, WNoZ, Inżynieria procesowa II, egzamin
Charakterystyka programów typu reality shows na przykładzie programu Big Brother
15 Sprzezenie procesow na przykladzie rekacji biochemicznych
Proces technologiczny odzysku odpadów na przykładzie Zakładu Odzysku i Recyklingu Odpadów w Lublinie

więcej podobnych podstron