Problem z portem C w Atmega8

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

Problem z portem C w Atmega8

Post autor: M@ciej » 03 maja 2007, 17:26

Witam wszystkich.

Mam małe pytanko: Czy jak podłączy się zasilanie do "części analogowej" mikrokontrolera Atmega8 (nóżka 22 - GND, Nóżka 20 - Vcc), to port C przestanie działać jako wejście? Bo mam właśnie tak podłączone a Portc.0, Portc.1 i Portc.2 skonfigurowane jako wejścia. Do tych wejść mam podłączone mikroswitche, zwierające wejścia do masy,ale Atmega nie reaguje na przyciskanie klawiszy i zachowuje się, jakby np. Portc.0 był cały czas zwarty do masy.

O co tu chodzi?

Pozdrawiam :)

ZbeeGin

Post autor: ZbeeGin » 03 maja 2007, 17:58

Co do zasilania, to należy zasilić część analogową i cyfrową, oraz wykorzystać obie końcówki GND. Różnica napięć pomiędzy VCC a AVCC ma być maksymalnie 0,3V.
Do AREF należy podłączyć kondensator.

Co do Twojego głównego problemu. To nie zauważyłem takiego działania. Porty działały poprawnie. Miałem styczność z Mega8 przy okazji płytki ZL2AVR i tam wszystko wyglądało OK.

Może wrzucisz fragment kodu?

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

Post autor: M@ciej » 03 maja 2007, 19:27

ZbeeGin pisze:Do AREF należy podłączyć kondensator.
Jakiej pojemności ma to być ten kondensator?

Nie używam wewnętrznych przetworników A/C Atmegi, tylko PCF8591 na I2C,ale to już inna bajka.
ZbeeGin pisze:Co do Twojego głównego problemu. To nie zauważyłem takiego działania. Porty działały poprawnie. Miałem styczność z Mega8 przy okazji płytki ZL2AVR i tam wszystko wyglądało OK.
Myślałem, że mam zwarte wyprowadzenia Atmegi do masy, ale sprawdzałem omomierzem i tak nie jest. Pozostałe porty udało się właściwie skonfigurować jako wyjścia, część portu C także (Portc.3 działa jako wyjście sterujące przekaźnikiem,poprzez tranzystor oczywiście)
ZbeeGin pisze:Może wrzucisz fragment kodu?
Oto fragment kodu:

Kod: Zaznacz cały

 $regfile = "m8def.dat"    ' Wskazanie Kompilatorowi , Ze Chodzi O Atmege8
 $crystal = 1000000

 Config Portc.0 = Input
 Config Portc.1 = Input
 Config Portc.2 = Input
 Config Portc.3 = Output

 Do
  If Pinc.0 = 0 Then Portc.3 = 1
 Loop
End
Pod Portc.0-Portc.2 podpięte są switche zwierające wejścia do masy. Równolegle do tych switchy są kondensatory 10nF do odkłócania styków. Pod Portc.3 podłączony jest wspomniany tranzystor, sterujący przekaźnikiem.

Program reaguje mi od razu, włączając przekaźnik (linijka między Do a Loop), jakby Pinc.0 był zwarty do masy,ale tak nie jest.

Podobno do prawidłowej pracy Atmegi, trzeba ustawić jakieś FuseBity,ale nie wiem jakie i wolę tam nic nie ruszać?
Ostatnio zmieniony 01 sty 1970, 1:00 przez M@ciej, łącznie zmieniany 1 raz.

ZbeeGin

Post autor: ZbeeGin » 03 maja 2007, 19:55

M@ciej pisze:Jakiej pojemności ma to być ten kondensator?
Skoro nie używasz ADC to ten kondensator jest zbędny. Ale dla informacji, wystarczy coś z zakresu 1-10uF by odfiltrować napięcie Vref.

Kod: Zaznacz cały

Config Portc.0 = Input 
Config Portc.1 = Input 
Config Portc.2 = Input 
Config Portc.3 = Output
No tak porty skonfigurowane, ale podciągania nie włączyłeś... :cry: Dopisz jeszcze

Kod: Zaznacz cały

Set PortC.0
Set PortC.1
Set PortC.2 
albo zastosuj zewnętrzne rezystory podciągające do Vcc (przykładowo 4,7k).
M@ciej pisze:Podobno do prawidłowej pracy Atmegi, trzeba ustawić jakieś FuseBity,ale nie wiem jakie i wolę tam nic nie ruszać?
W sumie nie trzeba. Fabryczne Mega8 mają włączony wewnętrzny generator RC taktujący procesor częstotliwością 1MHz (przy Vcc = 5V), a końcówka RESET spełnia swoją funkcję jako wejście zerujące.

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

Post autor: M@ciej » 04 maja 2007, 21:11

Ok, dzięki, już działa :)
Trzeba było je podciągnąć.

Pozdrawiam :)

ODPOWIEDZ