PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PB2 am ATMEGA 8 Konfigurieren?



Powell
15.02.2011, 19:14
Hallo Leute,

habe ein Problem: Mein Portb.2 am ATMEGA8-16 TQPF32 will nicht als eingang arbeiten.

Ich ziehe ihn über einen Taster auf Masse und frage ab ob er auf 0 oder 1 ist. Allerdings erkennt der Controller das signal einfach nicht. Er tut so als wäre er permanent auf 1 (ich habe mit dem Multimeter direkt am Pin nachgemessen, das Signal kommt definitiv an).

Das Programm 1:1 auf Portb.1 abgeändert funktioniert problemlos

Ebenso funktioniert alles problemlos, wenn ich den Portb.2 als Ausgang definiere (lasse ihn z.b. ein Rechtecksignal ausgeben was er auch anstandslos ausführt).

Nun frage ich mich ob man im programm noch irgendwas spezielles konfigurieren muss wenn man den Portb.2 als I/O Eingang nutzen will?

Anders als der Portb.1 hat Portb.2 neben der OC1 funktion nämlich noch die funktion als slave select pin worunter ich mir jetzt leider auch nichts vorstellen kann...

vielleicht weiß jemand bescheid... ich sehe das problem nicht :(

TobiKa
15.02.2011, 19:34
SS ist für SPI.
Sicher das du nicht irgendwo nen kurzen auf der Platine/Schaltung hast?
Zeig mal deinen Code,manchmal macht man Fehler die man selbst nicht findet.

Powell
15.02.2011, 19:38
Hi,

hier ist mein Code. Genauso hab ichs getestet, also ganz einfach gehalten:



' E4V12 mit ATMEGA8 @ 8Mhz intern

'---------------------------------------------------------

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



'---------------------------------------------------------


Config Pinc.0 = Input 'ADC freier Eingang
Config Pinc.1 = Input 'ADC "winkelsensor"
Config Pinc.5 = Input 'ADC Current Sense VNH2SP30

Config Pind.2 = Input 'freier I/O input
Config Pind.4 = Input 'freier I/O input
Config Pind.6 = Input 'freier I/O input
Config Pinb.0 = Input 'freier I/O input (ICP)

Config Pinb.1 = Input 'Hochschalten
Config Pinb.2 = Input 'Runterschalten

Config Pinb.3 = Output 'Motor IN A
Config Pinb.4 = Output 'Motor IN B
Config Pinb.5 = Output 'ZU Relais

'---------------------- Variablen -----------------------------------



'++++++++++++++++ Hauptprogramm +++++++++++++++++++++++++++++++++

Portb.2 = 1

Do



If Pinb.2 = 0 Then

Portb.5 = 1

Waitms 300

Portb.5 = 0

End If

If Pinb.1 = 0 Then

Portb.5 = 1

Waitms 300

Portb.5 = 0

End If





Loop

'+++++++++++++++++++++++++++++++++++++++++++++++++



End

oZe
15.02.2011, 22:35
"Portb.2 = 1"
Ersetz das mal mit PinB.2 = 1 ;-)
Und in den Output Confings schreibt man PortB.X anstatt PinB.X.
Hoffe ich konnte dein problem beseitigen

Powell
15.02.2011, 22:57
Hi,

nein sorry, da muss ich dir leider widersprechen. Zum einen kann man in den configs sowohl Port als auch Pin schreiben, zum anderen kann man auch nicht pinb.2 = 1 schreiben (compiler gibt fehler aus, cannot write to pin register). Hab das alles zur sicherheit auch noch probiert.

Das komische ist ja wirklich dass ich direkt am Pin (ganz oben am Beinchen vom Controller) nachgemessen hab und da auch ein Statuswechsel stattfindet, der Controller diesen aber nicht annimmt (Hardware ist also fehlerfrei)

stehe also noch vor genau dem gleichen Problem wie vorher :(

oZe
15.02.2011, 23:19
Mist da hab ich mich wohl komplett vertan. Zum einen hast du tatsächlich recht mit dem Pullup aber das man bei Inputs auch Port schreiben kann ist mir absolut neu. Ich war immer der Meinung das das nicht den gewünschten Effekt bringt. Sorry für die Fehlinfo ;-)

TobiKa
15.02.2011, 23:33
Ist mehr raten, als wissen...
aber schonmal mit "Debounce ..." versucht?

hardware.bas
16.02.2011, 05:14
Eine Portabfrage bei Eingangspins geht meines Wissens nur mit
"PIN". VG Micha

Powell
16.02.2011, 10:13
Hi zusammen,

schätze mal der Controller hat irgendwie einen Knacks, kann mir das anders nicht erklären. Werd hier wohl oder übel die Hardware ein bisschen umfrickeln müssen... :(