PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] Pin am AVR taktet obwohl er es nicht soll



robodriver
16.12.2007, 11:17
Hallo leute,

ich saß jetzt ziemlich lange an einem Problem, was sich scheinbar nicht lösen lies. Jetzt habe ich nach sehr langem suchen zumindest die Fehlerursache gefunden. Nur leider weiß ich nicht wie ich ihn beseitigen kann. Ich hoffe ihr könnt mir weiter helfen.

Ich habe an 4 Pins eines AVRs einen CMOS-Baustein 4028 (BCD Decoder)angeschlossen. Mein Programm sieht wie folgt aus:



$regfile = "m8def.dat"
$crystal = 8000000

'DDR = &B76543210 ; 0=Eingang ; 1=Ausgang
Ddrb = &B00000111
Ddrd = &B1111001
Ddrc = &B00000000
Portc = &B00000000
Portb = &B00000100
Portd = &B00000101

Config Sda = Portc.4 'Data-Line für I2C-Bus
Config Scl = Portc.5 'Tackt für I2C-Bus
Config Adc = Single , Prescaler = Auto

Declare Sub Ir_vl_an

On Twi Data_empfang

Start Adc
'Enable Int0
Enable Interrupts

Ir_vl_an
Do
Loop

Sub Ir_vl_an
'IR-Diode vorne links anschalten
Portd.4 = 1
Portd.5 = 0
Portd.6 = 1
Portd.7 = 0
Return
End Sub


So weit klappt das eigentlich auch fast.
Wenn ich die Spannungen an den Pins messe kommt folgendes heraus:
Portd.4 = 5V
Portd.5 = 0V
Portd.6 = 5V
Portd.7 = 0,5V

Und die 0,5V am Portd.7 hat mein CMOS offensichtlich als "1" erkannt.
Nun bin ich mal noch auf die Idee gekommen nach schwingungen zu schaun (Freuqenzmessung am Multimeter) Und wie ich feststellte: Portd.4-6 haben 0 HZ und Portd.7 hat etwa 50HZ und manchmal 500 HZ.
Meine Eingangsspannung steht bei 0HZ, ist geglättet und sauber.

Ich habe auch mal versucht einen anderen Controller zu verwenden. Jedoch komme ich auch da auf exakt das gleiche Ergebniss.

Von den Leiterbahnen her habe ich alles durchgemessen, da gib es keinerlei Fehlverbindungen. Und auch sonst gibt es auf der Platine keine weiteren Frequenzen (Außer dem 8MHz Quarz)

Hat irgendwer eine Idee woher diese Taktung an dem Pin herkommen könnte?

Hoffe ihr wisst noch was, denn ich bin mit meinen Ideen am Ende :(

Gruß Robodriver

Dirk
16.12.2007, 11:25
Hallo robodriver,

hast du gesehen, dass du ddrd nur mit 7 Bit definiert hast?

Gruß Dirk

robodriver
16.12.2007, 11:34
Uups.
Stimmt du hast recht. So ein misst, da muss mir irgendwann wohl mal ausversehen was verloren gegangen sein. Und ich such Tagelang auf der Platine und im quelltext rum...
Denn vorher hatte es alles einwandfrei funktioniert...

Na gut, hab jetzt jedenfalls mal 8 Bit definiert und jetzt funktionierts auch.
Aber gut zu wissen, das ein schwingender Pin auf einen nicht-definierten Pin hinweist.
Supi man lernt nie aus :)

Tausend dank nochmal :) :) :)

Dirk
16.12.2007, 11:41
... zur Ergänzung:

Ich gehe davon aus, dass ddrd = &b1111001 letztlich so gedeutet wurde:
ddrd = &b01111001.

Damit war d.7 Eingang. Was du gemessen hast, war die Netzfrequenz an einem hochohmigen Eingang. Also keine echte, vom M32 irgendwie produzierte 50Hz Frequenz.

Gruß Dirk

robodriver
16.12.2007, 13:06
Ja, scheint so.
Aber warum denn Netz-Frequenz?
Wo soll er die her nehmen? Er läuft über ein NiMH Akku....
Und warum sind es ab und zu dann auch mal 500Hz?

^^ ach ja, und wenn ich den Controller von der Schaltung runter genommen habe, war die frequenz weg.
Also muss diese schon irgendwie was mit dem Controller zu tun gehabt haben