No dobra, cieszę sie ale powiedzcie czy zaprogramowaliscie Atmege i zadziałała czy na sucho kompilowaliście ?
Jeśli wyskakuja przy kompilacji jakieś błędy w których jest " F_CPU" to znaczy że kompilator nie wie jaką częstotliwościa taktujemy mikrokontroler. Żeby kompilatorowi to "powiedzieć" należy:
- kliknąć menu "Project" potem "Configuration Options" i w pole Frequency wpisać częstotliwość naszego kwarca w Hz.
- kliknąć ok i spróbować kompilować jeszcze raz (w oknie gdzie pokazywały sie błędy powinny być teraz tylko zielone kropki
(zielone = brak błędów i ostrzeżeń, zółte= ostrzeżenia, czerwone=błędy)
Skopiujcie sobie katalog "lekcja2" (z zawartością) pod nazwą "lekcja3" do katalogu "kurs" ... uruchomcie AVRStudio wskazując na plik "lcd" w "lekcja3". Skasujcie cały kod z pliku lcd.c i na miejsce skasowanego wklejcie to co poniżej:
Kod:
/* Jest to trzecia lekcja Kursu Programowania mikrokontrolera Atmega w języku C
Należy podłączyć diodę LED poprzez rezystor 680 OHm do wyprowadzenia A0, druga noga diody do masy.
oraz przycisk (microswitch lub inny) do Wyprowadzenia B0 (PORT B wypr.0) - drugi biegun do masy.
*/
/* #include <jakiś_plik> wstawia zawartość tego pliku dokładnie w to miejsce w którrym zawarte jest to wyrażenie */
#include <avr/io.h> // czyli tu dla kompilatora jest cała zawartość pliku io.h (nie wnikajcie teraz gdzie jest ten plik
#include <util/delay.h> // tu podobna historia do powyższej
int main(void)
{
DDRA = 0b00000001;
DDRB = 0b00000000; // właczyłem do zabawy port B
PORTB= 0b00000111; // "1" oznacza podciągnięcie wejścia do napięcia zasilania Atmegi poprzez wewnętrzny rezystor
// możecie sprawdzić miernikiem że wyprowadzenia B0, B1 i B2 mają jakieś napięcie w przeciwieństwie do B3, B4 .... B7
while(1) // funkcja pętli nieskończonej (gdyby zamiast "1" było jakieś wyrażenie to funcja działa do momentu kidy wyrażenie przestale byc prawdziwe = czyli przestalje być logiczna "1")
{
if(bit_is_clear(PINB, 0)) // jeśli na wyprowadzeniu (wejście) B0 jest logiczne 0 to wykonaj to co pomiędzy { i }
{
PORTA=PORTA^0b00000001; // wyjaśnienie tego na samym dole
_delay_ms(160); // opóźnienie eliminujące "trzaski" przycisku
}
}
}
/* naciskajcie przycisk i zobaczcie co się dzieje, a dzieje sie tak dzieki zastosowaniu
operatora "^" czyli bitowej alternatywy wykluczającej (XOR). wyjasnia to przykład:
0 1 0 1 0 1 0 1 to wartość rejestru PORTA
^
0 0 1 1 0 0 1 1 to wyrażenie "zmieniające" zawartość tego rejestru
=
0 1 1 0 0 1 1 0 to nowa wartość rejestru PORTA (po wykonaniu polecenia)
PORTA to jeden z wielu rejestrów Atmegi, odpowiada on za to co jest na ośmiu wyprowadzeniach PORTU A
DDRC to rejest odpowiadający za kierunkowość wyprowadzeń PORTU C
PIND to rejestr, w którym "widać" jakie stany logiczne sa na wyprowadzeniach PORTU D
Możecie sobie sciągnąć .pdf z opisem Atmegi (niestety po angielsku) jest tam pełny spis wszystkich rejestrów
autor: SP4EJT nie zastrzega sobie praw autorskich, pod warunkiem że nie czerpiesz z tego korzysci materialnych, możecie kopiować i zmieniać ten plik
*/
Praca domowa: Kto bardziej kumaty - niech spróbuje zrobic tak aby dioda i przycisk działały na tym samym Porcie np. na Porcie A dioda niech zostanie na A0 a przycisk dajcie na A7 i koniecznie napiszcie czy się udało.... a jesli nie to piszcie w czym problem
... i proszę się nie wstydzic i pisac co jest nie zrozumiałe !!!!!!! bo mam wrażenie że straciliście zapał.