atmega8l + program
Masz problem? Zapytaj na forum elektroda.pl
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
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.
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
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.