Skocz do zawartości

Linux, avr, kwarc, zewnętrzna pamięć


Pomocna odpowiedź

Napisano

Mam kilka pytań na które nie znalazłem jeszcze odpowiedzi a dokładnie: ( język C )

1. Co muszę zainstalowac aby móc kompilować programy dla avr pod linuksem ??

2. Pod które piny muszę podłączyć kwarc i czemu akurat pod te.

3. Czy w programie muszę coś więcej podawać oprócz

#define F_CPU  <częstotliwość>L 

??

4. Czy zewnętrzną pamięć EEPROM mogę podłączyć pod obojętnie które piny czy są jakieś specjalne i jak

zapisać dane do tej pamięci ??

1Niemam linuxa....

2Każdy procek ma dwa piny oznaczone XTAL1 oraz XTAL2 do tych właśnie pinów podłącza się kwarc z kondensatorami 33pF

3Programowanie to nie tylko podanie jednej instrukcji.... ....żeby powstał program trzeba całego szeregu instrukcji które program przekompiluje i wyśle do uC

4Jeszcze nie wiem 😃

Pozdrawiam

co do pytania 3 to chodziło mi o to czy coś jeszcze oprócz tego zapisu potrzeba żeby kożystać z dołączonego kwarcu ( z jego częstotliwości )

Co muszę zainstalowac aby móc kompilować programy dla avr pod linuksem ??

W internecie jest wiele na ten temat, np:

http://paul.graysonfamily.org/thoughts/avrlinux/

co do pytania 3 to chodziło mi o to czy coś jeszcze oprócz tego zapisu potrzeba żeby kożystać z dołączonego kwarcu ( z jego częstotliwości )

Trzeba przeprogramować (z poziomu programatora) odpowiednie tzw. fuse bity (patrz dokumentacja uC) , nowe Atmega i Attiny pracują z wewnętrznym oscylatorem o częstotliwości 1MHz.

Korzystając z jakiegoś wygodnego programu....

Podaj który to AVR i jaka jest częstotliwość dołączonego kwarcu, to ja napisze jak i co

1. Należy przyłączyć kwarc jak na rysunku poniżej

kwarc.gif

2. Pobrać z internetu program do obsługi programatora np. "TwinAVR" (wydał mi się najwygodniejszy)

http://www.rowalt.de/mc/avr/avrtools/twinavr.zip

Program nie posiada instalatora. Jeśli używasz win9x lub ME wystarczy rozpakować plik twinavr.zip , natomiast jeśli działasz na Win2000/XP należy dodatkowo zamontować i uruchomić sterownik dający dostęp programowi do portu drukarki. Pliki sterownika znajdują się w podkatalogu "NtDriver". Trzeba skopiować plik "UserPort.sys" do windir\system32\drivers (windir - katalog gdzie zamontowano windows), a następnie uruchomić program "UserPort.exe". Pojawi się okienko dialogowe jak poniżej, w którym należy wcisnąć przycisk "Start'

userport.jpg

3. Uruchomić program "twinavr.exe", przy pierwszym uruchomieniu TwinAVR pojawi się okienko "Settings" jak poniżej

settings.jpg

W polu "Programmer hardware" zaznaczyć należy opcje "Kanda dongle" ( dla STK200),
a w polu LPT - użyty port drukarki (z przyłączonym programatorem).

Następnie klik w przycisk "OK" i okienko "Settings" znika, pozostaje widoczne główne okienko programu jak na obrazku poniżej.

avrclock.jpg

W polu AVR clock proponuje wpisać wartość 16, wartość ta decyduje z jaką prędkością programator komunikuje się z uC.

W okienku programu poniżej pola "AVR clock" widać cztery przyciski: "Write", "Read", "Erase" i "Config", celem przeprogramowania fuse bitów AVRa należy kliknąć przycisk "Config", pojawi się w tedy okienko "Chip configuration", jak na poniższym obrazku.

chip_configuration1.jpg

Żeby ATmega8 działał z zewnętrznym kwarcem zegarkowym 32 768 Hz należy

ustawić"

CKSEL 1001

CKOPT 0

ma być "DOKŁADNIE TAK" jak na poniższym obrazku.

chip_configuration2.jpg

Przycisk "Write" i gotowe.

Jeśli w tym momencie pojawi okienko "Error", nie należy się tym przejmować, trzeba zamknąć okienko "Settings" i otworzyć ponownie klikając w przycisk "Config", powinny pokazać się wtedy oczekiwane ustawienia.

Uwaga! przy konfigurowaniu fuse bitów można przez pomyłkę zablokować możliwość programowania uC programatorem szeregowym.

By sprawdzić, czy faktycznie uC działa z częstotliowścią 32768Hz, można zaprogramować AVR-a

programem z migającą diodą LED.

#define F_CPU 32768L		 /* Częstotliwość kwarcu */
#include <avr/io.h> 
#include <util/delay.h>				

int main(void) 
{ 
   DDRD |= _BV(1); 
   unsigned char i; 

   for (;;) 
   {      		                 
PORTD ^=_BV(1);			 
        for (i = 0; i < 50; i++) 
     		               _delay_ms(10);	       
  } 
  return 0; 
}

Czy dla każdego kwarcy będą takie same ustawienia fuse bit ( jeżeli nie to gdzie je znaleźć ?)??

Jak zaprogramować fuse bit w linuksie ??

Czy dla każdego kwarcy będą takie same ustawienia fuse bit ( jeżeli nie to gdzie je znaleźć ?)??

Nie, ustawienia różnią się. Po szczegóły najlepiej zajrzeć do dokumentacji ATmega8

http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf (od strony 25)

Jak zaprogramować fuse bit w linuksie

Działając w konsoli można posłużyć się programem "uisp" albo "avrdude"

Przykład

Odczyt fuse bitów z nowego ATmega8 (wewnętrzny oscylator 1MHz)

uisp -dprog=stk200 -dlpt='/dev/parport1' -dpart=atmega8 --rd_fuses -dt_sck=60
Atmel AVR ATmega8 is found.

Fuse Low Byte      = 0xe1
Fuse High Byte     = 0xd9
Fuse Extended Byte = 0xff
Calibration Byte   = 0xbf  --  Read Only
Lock Bits          = 0xff

Przeprogramowanie fuse bitów, tak by ATmega8 działał z zewnętrznym kwarcem zegarkowym 32768 Hz

uisp -dprog=stk200 -dlpt='/dev/parport1' -dpart=atmega8  -dt_sck=70 --wr_fuse_l=0xe9 --wr_fuse_h=0xc9

Przeprogramowanie fuse bitów na powrót do do stanu początkowego(wewnętrzny oscylator 1MHz)

uisp -dprog=stk200 -dlpt='/dev/parport1' -dpart=atmega8  -dt_sck=70 --wr_fuse_l=0xe1 --wr_fuse_h=0xd9

Pomoc do programu, oczywiście

uisp -h    

Wartość parametru "-dt_sck" decyduje o szybkości z jaką programator komunikuje się z uC, wartość "70" dobrałem doświadczalnie, by spowolnić programowanie uC tak, żeby programator dostosował się do "powolnego" ATmega8 z zegarem 32768Hz, w innych przypadkach parametr ten można pominąć ( pozostawia wartość domyślną).

Czy zewnętrzną pamięć EEPROM mogę podłączyć pod obojętnie które piny czy są jakieś specjalne i jak zapisać dane do tej pamięci

A jaki jest typ tej pamięci EEPROM ?

jeżeli w dokumentacji ATMega8 jest:

168ab3785bcd17a3med.jpg

chodzi o ustawienia fuse bit dla kwarcu 3-8 MHz. W tym programie dla win w 2 kolumnie Fuse Low bits jeżeli dla 3-8 MHz sa ustawienia 111 dla CKSEL3..1 to w programie musze ustawic CKSEL1:zaznaczyć CKSEL2:zaznaczyć i CKSEL3:zaznaczyć ???

PS. abxyz mógłbyś przesłać mi Makefile na meila ??

Proponuje ustawić jak na rysunku poniżej

(rezonator kwarcowy 3.0 .. 8.0 MHz)

chip_configuration3.jpg

Należy też brać pod uwagę informacje z następnej tabeli

table5.png

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...