PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wieso führt mein Mega32 If-Schleife nicht korrekt aus?



Foooob
28.02.2006, 00:30
Hallo

Also langsam stehts mir ja schon bis oben...
Wieso bringt mein Mega32 es eigentlich nicht fertig diesen Code korrekt auszuführen???



$regfile = "m32def.dat"
$crystal = 11059200

Ddrc = &B00000000
Ddrd = &B00111100

Do

If Pinc.2 = 1 Then

Portd.4 = 1
Waitms 3000
End If

Loop
End



Was ist denn daran bitte falsch???
Bei meinem Mega 8 habe ich einen äquivalenten Code gemacht, der hier zu sehen ist:



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

Ddrc = &B00000000
Ddrd = &B11110000

Do

If Pinc.1 = 1 Then

Portd.4 = 1
Waitms 500
End If

Loop
End


Bei meinem Mega8 funktioniert dieser Code wunderbar, wieso zickt dann mein Mega32 so rum?
Kurz zur Sachlage: Beide Megas erhalten von einem OP Amp ein Eingangssignal, das entweder 1 oder 0 ist. Der AVR soll daraufhin die If-Schleife ausführen. Wie gesagt, mein Mega8 hat damit kein Problem aber bei meinem Mega32 ist der Pin D4, der erst auf 1 gehen dürfte wenn Pin C2 auf 1 ist immer auf 1. Ganz egal wie man den Zustand an PC2 auch dreht und wendet. Wieso???

JTAG hab ich bereits deaktiviert.
Bei der 0 am Eingangspin PC2 messe ich zwar immer noch 0,66V aber man sagte mir dass der AVR das trotzdem als 0 erkennt. Nungut.
Die 1 ist sauber hochgezogen auf ca. 4,9V.

darwin.nuernberg
28.02.2006, 00:42
probier mal
config portD = input

ODER

CONFIG PIND.5 = INPUT
CONFIG PIND.4 = INPUT
CONFIG PIND.3 = INPUT
CONFIG PIND.2 = INPUT


bzw.

Config PORTC = INPUT

CONFIG PINC.5 = INPUT
CONFIG PINC.4 = INPUT
CONFIG PINC.3 = INPUT
CONFIG PINC.2 = INPUT


anstelle ddrc = &B00111100


Du stellt C nicht auf Input oder sehe ich da was falsch?

-tomas-
28.02.2006, 09:30
um in der oberen Syntax zu bleiben, geht auch:


Config PortC = &B11111111 '1=INPUT / 0=OUTPUT
Condig PortD = &B11000011

Foooob
28.02.2006, 13:24
Wenn ich den oben genannten Code von dir, -tomas- einbaue dann ist mein AVR komischerweise überhaupt nicht mehr unter Kontrolle, dann dreht er total durch.

Wenn mein Code nun folgendermaßen aussieht




$regfile = "m32def.dat"
$crystal = 11059200

Config Portc = &B11111111 '1=INPUT / 0=OUTPUT
Config Portd = &B11000011

Do

If Pinc.2 = 1 Then

Portd.4 = 1
Waitms 3000
End If

Loop
End


Dann ist erst mal das Eingangssignal am PC2 total verzogen. Wenn eine 1 am Eingang liegen anliegen sollte taumelt das Signal immer bei ca 1,76V rum. Am Ausgang das Selbe. Der ist mal wieder nur auf der "1" und hat ebenfalls nur 1,76V. Spiele ich aber den alten Code wieder auf habe ich wieder richtige 0en und 1en. Da werd mal einer schlau draus...

-tomas-
28.02.2006, 13:39
Ich kenne Deine Schaltung nicht. Ggf. mußt Du noch den Pegel ziehen.

Setze mal die internen Pullups.

Portc = &B11111111 'input pullup

Foooob
28.02.2006, 16:51
Das hab ich auch schon probiert, nur leider half auch das nichts.
Ich weis wirklich nicht mehr recht woran es liegen kann.

Ist es vielleicht möglich dass ein AVR rumspinnt weil er nur "halbwegs" korrekt verdrahtet ist. Ich meine er läuft ja, auch "stabil" wenn man das so nennen kann aber irgendwie eben nicht korrekt.

Bei Gelegenheit gibts mal einen Schaltplan.

chr-mt
28.02.2006, 17:12
Hi,
du setzt den Pin nicht zurück.

Wenn dein Port einmal high ist, dann bleibt er auch so.
Da kann sich nix ändern.



$regfile = "m32def.dat"
$crystal = 11059200

Config Portc = &B11111111 '1=INPUT / 0=OUTPUT
Config Portd = &B11000011

Do

If Pinc.2 = 1 Then
Portd.4 = 1
Waitms 3000
End If

If Pinc.2 = 0 Then
Portd.4 = 0
End If

Loop


oder mit "else", geht auch...

Hast aber auch ein Hardwareproblem, so wie es aussieht.
Kondensatoren an Spannungsregler und Chip ?


Gruß
Christopher

Foooob
01.03.2006, 14:42
Was soll ich da noch sagen außer...
...vielen, vielen Dank!!

Durch diese Codeerweiterung funktioniert das Ganze nun wunderbar, ich danke vielmals!

Im Nachhinein ja auch irgendwie logisch, zwar verstehe ich nicht wieso ich das bei meinem Mega8 nicht gebraucht habe aber...nungut

Nun bin ich wirklich froh dass das nun so wunderbar und exakt funktioniert.

Kondensatoren zur Spannungsstabilisierung verwende ich übrigens.
Insgesamt 2000nF für die Motorsteuerung und 1420nF für die übrige TTL-Elektronik.

darwin.nuernberg
05.03.2006, 19:28
Insgesamt 2000nF für die Motorsteuerung und 1420nF für die übrige TTL-Elektronik.

Große Kapazitäten sind gut um z.B. Brummspannung zu unterbinden,
aber Du darft auch kleine kapazitäten nicht unterschätzen, die können sich schneller umladen und so z.B. HF (Hochfrequenz) auf der Versorgung unterbinden.

Klar die Summe der Kapazitäten sind alle parallel geschalteten Teilkapazitäten, aber das ist nur die halbe Wahrheit.

Also 'nen goßen Lade-Elko fürs grobe
und 'nen kleinen Siebelko dazu parallel fürs feine.

(Ich weis ja nicht was Du da so verschaltet hast, wird schon so passen, sollte auch nur noch so angemerkt sein)