Problemy z Portem C w Atmega 16

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Problemy z Portem C w Atmega 16

Post autor: M@ciej » 04 sie 2007, 15:00

Witam wszystkich.

Zbudowałem urządzenie sterowane mikroprocesorem Atmega 16. Układ programuję za pomocą Bascoma. Dałem odpowiednie dyrektywy:

$Crystal=12000000
$regfile = "m16def.dat",

jednak dla portu C mogę zaprogramować jedynie 2 najstarsze bity (jako I/O), czyli portc.6 i portc.7. Na portc.5 występuje stałe napięcie 1,16V, na pozostałych (portc.0 do portc.4) występuje stan wysoki (4.96V) i nie da się tego w żaden sposób zmienić. Użyłem najprostrzych wpisów do rejestrów IO: portc.X = 0 i portc.X = 1 (gdzie X to 0÷5).


Ten port ma sterować przekaźnikami poprzez tranzystory. Połączenia elektryczne sprawdzałem -wszystko jest dobrze!

Czy ten port jest "walnięty", czy może domyślnie skonfigurowany jakoś inaczej niż I/O?

Wcześniej do Portc.4 podłączony był sygnał RS wyświetlacza LCD 2x16,ale to nie działało i sygnał został przeniesiony na port D, wraz z innymi sygnałami sterowania wyświetlacza. Czyżby to podłączenie sygnału RS do jednego portu a reszty pinów wyświetlacza do innego portu mogło zepsuć cały port C?

Dodatkowo wyświetlacz dosyć długo się inicjalizuje (ok. 2 sek.).

Pomóżcie!

Pozdrawiam wszystkich :)

ZbeeGin

Post autor: ZbeeGin » 04 sie 2007, 15:39

Ludzie, czytajcie dokumentację!

Problem z portem C = Wyłącz JTAG przez ustawienie odpowiedniego bitu fuse.
Problem z długim czasem inicjalizacji = Ustawiony wewnętrzny generator RC o niskiej częstotliwości.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 04 sie 2007, 16:47

Ok, wyłączę JTAG, a czy trzeba coś zmieniać w taktowaniu? Nie wystarczy podłączyć rezonatora 12 MHz i wpisać w dyrektywie:

$Crystal=12000000 ?

W Atmega8 była taka opcja w "Fusach", więc tutaj także jej poszukam.

ZbeeGin

Post autor: ZbeeGin » 04 sie 2007, 16:51

Tylko uważaj byś sobie procesora nie zablokował przez wyłączenie SPI, RESETU, czy ustawienie źródła taktowania którego nie masz.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 04 sie 2007, 18:13

Ok, JTAG wyłączyłem i zadziałało, ale jaką opcję wybrać dla oscylatora?

External Clock?

Mam zwykły rezonator + 2 kondensatory 27 pF

ZbeeGin

Post autor: ZbeeGin » 04 sie 2007, 18:26

Nie! Musisz wybrać External XTAL CKSEL3..0 = 1111.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 04 sie 2007, 18:36

Ale ja nie mam takiej opcji, jak napisałeś?

W Fusebitach mam na końcu 1111:1111, czy to to?

ZbeeGin

Post autor: ZbeeGin » 04 sie 2007, 18:40

Tak, to jest dla Ciebie właściwe ustawienie przy takim kwarcu.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 04 sie 2007, 19:05

Ale dostał kopa! Teraz muszę wprowadzać instrukcje opóźniające przy obsłudze klawiszy, bo wariuje :)

Dzięki za rady ZbeeGin :)

ODPOWIEDZ