atmega8l + program



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Nast阷ny
Wiadomo舵
Spis tre禼i
From: Wojtek <adun_wywalto_at_nospam_o2.pl>
Subject: atmega8l + program
Date: Thu, 26 May 2005 00:22:47 +0200


Witam szanownych grupowicz贸w

mam nast臋puj膮ce zadanie do wykonania: jest atmel wspomniany w tytule i
do niego pod艂膮czonych jest 12 di贸d. PC0-PC5 PD0-PD5, i mam z komputera
zapala膰 te diody w ten spos贸b 偶e na jedno wej艣cie wysy艂am ile di贸d ma
si臋 za艣wieci膰 a na drugie "zr贸b to" co spowoduje 偶e stan wy艣wietlacza
si臋 zmieni, diody zapalane s膮 po kolei od lewej do prawej czyli po 7
impulsach i "zr贸b to" zapali si臋 7 dio贸d od lewej.

na programowaniu Atmeli nie znam si臋 wcale, nieobce mi jest C ale ju偶
odpalanie wyj艣膰 to troch臋 inna bajka, z wej艣ciami podobnie.

chcia艂bym prosi膰 kogo艣 aby poda艂 mi szkielet (tzn. podstawowe funkcje
typu "zapal diod臋 na PA1" albo pobierz warto艣膰 z wej艣cia jakiego艣tam.
(nie obra偶臋 si臋 oczywi艣cie na bardziej kompletne rozwi膮zanie ;)

z g贸ry dzi臋kuj臋
Wojtek


Poprzedni Nast阷ny
Wiadomo舵
Spis tre禼i
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: atmega8l + program
Date: Thu, 26 May 2005 02:25:26 +0200


Wojtek wrote:

na programowaniu Atmeli nie znam si臋 wcale, nieobce mi jest C ale ju偶
odpalanie wyj艣膰 to troch臋 inna bajka, z wej艣ciami podobnie.

chcia艂bym prosi膰 kogo艣 aby poda艂 mi szkielet (tzn. podstawowe funkcje
typu "zapal diod臋 na PA1" albo pobierz warto艣膰 z wej艣cia jakiego艣tam.

Do wszystkich poni偶szych przyk艂ad贸w trzeba da膰:
#include <avr/io.h>


Najpierw konfigurujemy ca艂y port A jako wyj艣ciowy:

DDRA = 0xff;

i gasimy wszystkie diody (pod艂膮czone przez rezystor mi臋dzy pin portu a
mas臋):

PORTA = 0;

Zapalenie diody 0..7 (bitu 0..7 w rejestrze wyj艣ciowym portu A):

PORTA |= (1 << n); // n - numer diody (0..7)

Zgaszenie diody:

PORTA &= ~(1 << n);

Aby skonfigurowa膰 pin jako wej艣cie nale偶y w rejestrze DDRA wyzerowa膰
odpowiedni bit, aby skonfigurowa膰 jako wyj艣cie - ustawi膰 bit. Na
przyk艂ad piny 0..3 wej艣cia a 4..7 wyj艣cia:

DDRA = 0xf0;

No i na koniec odczytanie stanu wej艣cia czyli sprawdzenie rejestru PINA:

if (PINA & (1 << n))
// wej艣cie r贸wne 1
else
// wej艣cie r贸wne 0

Mo偶na oczywi艣cie operacje bardziej komplikowa膰, np. jednocze艣nie zapali膰
w porcie A bit nr 0 a zgasi膰 bit nr 2:

PORTA = (PORTA | (1 << 0)) & ~(1 << 2);

albo jak kto woli kr贸cej:

PORTA = (PORTA | 0x01) & 0xfb;

Cz臋sto aby zrobi膰 operacj臋 na 2 bitach bardziej op艂aca si臋 napisa膰 2
linie kodu ni偶 1. Po prostu w powy偶szym przyk艂adzie procesor musi
odczyta膰 PORTA, obliczy膰 operacj臋 OR, obliczy膰 operacj臋 AND a na ko艅cu
zapisa膰 PORTA. Kr贸cej (w pami臋ci programu) b臋dzie jedn膮 instrukcj膮
zapali膰 bit a drug膮 zgasi膰:

PORTA |= (1 << 0); // to wygeneruje jedn膮 instrukcj臋 sbi
PORTA &= ~(1 << 2); // to wygeneruje jedn膮 instrukcj臋 cbi

No ale tym razem bity nie zmieni膮 swojego stanu _r贸wnocze艣nie_ - musisz
uwzgl臋dni膰 na czym bardziej zale偶y w danym przypadku.

Podobne nazwy odnosz膮 si臋 do innych port贸w: DDRB/PORTB/PINB,
DDRC/PORTC/PINC itd.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wys艂aniem do mnie maila usu艅 "123" z adresu.

Poprzedni Nast阷ny
Wiadomo舵
Spis tre禼i
From: Wojtek <adun_wywalto_at_nospam_o2.pl>
Subject: Re: atmega8l + program
Date: Thu, 26 May 2005 08:22:01 +0200


wielkie dzi臋ki za pomoc,

przyk艂ad jest super, zw艂aszcza 偶e zapomnia艂em doda膰 偶e o t膮 sk艂adni臋 mi
chodzi a wi臋kszo艣膰 rzeczy kt贸re znalaz艂em u偶ywa sbi/cbi/outp i m贸j
kompilator tego nie przyjmuje.


pozdrawiam
Wojtek

Poprzedni Nast阷ny
Wiadomo舵
Spis tre禼i
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: atmega8l + program
Date: Fri, 27 May 2005 23:10:32 +0200


Wojtek wrote:

przyk艂ad jest super, zw艂aszcza 偶e zapomnia艂em doda膰 偶e o t膮 sk艂adni臋 mi
chodzi a wi臋kszo艣膰 rzeczy kt贸re znalaz艂em u偶ywa sbi/cbi/outp i m贸j
kompilator tego nie przyjmuje.

Nie u偶ywaj tych makr. Wypad艂y z najnowszej wersji kompilatora i ju偶 nie
wr贸c膮.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wys艂aniem do mnie maila usu艅 "123" z adresu.