- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Wieso führt mein Mega32 If-Schleife nicht korrekt aus?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519

    Wieso führt mein Mega32 If-Schleife nicht korrekt aus?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

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

    Code:
    $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:

    Code:
    $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.

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    60
    Beiträge
    1.305
    Blog-Einträge
    1
    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?
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    um in der oberen Syntax zu bleiben, geht auch:
    Code:
     
    Config PortC = &B11111111    '1=INPUT / 0=OUTPUT 
    Condig PortD = &B11000011

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    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

    Code:
    $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...

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    Ich kenne Deine Schaltung nicht. Ggf. mußt Du noch den Pegel ziehen.

    Setze mal die internen Pullups.
    Code:
    Portc = &B11111111    'input pullup

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    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.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    du setzt den Pin nicht zurück.

    Wenn dein Port einmal high ist, dann bleibt er auch so.
    Da kann sich nix ändern.
    Code:
    $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

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    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.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    60
    Beiträge
    1.305
    Blog-Einträge
    1
    Zitat Zitat von Foooob
    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)
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests