-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Atmega48 tut nicht so wie ich will

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10

    Atmega48 tut nicht so wie ich will

    Anzeige

    Hallo Leute!

    Ich bin neu hier und versuche mich ein wenig in Sachen Elektronik damit man nicht auf der Strecke bleibt.

    Ich habe ein ganz simples Projekt angefangen und frage mich was schief läuft.
    Es geht um folgendes. 3 Eingänge sollen abgefragt werden. Wenn die Bedingungen vorhanden sind soll Ausgang Pinb.1 gesetzt werden.

    So dachte ich mir kann ja nicht so schwer sein. In Bascom Simulator funktioniert alles denke ich mal zumindest solange ich Schritt für Schritt die Zeilen abarbeite. Lasse ich das Programm durchlaufen nunja ist wohl eher eine Zeile dann zeigt mir Bascom wirre Ausgänge an .. Jetzt bin ich nicht sicher ob das an meinem Rechner liegt. der eventuell zu schnell dafür ist die Rückmeldungen von Bascom anzuzeigen oder liegt es an meinem getippten Werk...


    Do
    If Fensterschalter = 1 And Tuerkontakt = 1 And Eingangrauchmelder = 0 Then
    Alarm = 1
    Else
    Alarm = 0
    End If
    Wait 5
    Loop

    Die Aliasnamen hab ich gesetzt und auch über Config bestimmt was Eingang und was Ausgang ist.

    Jetzt hab ich mir eine Einfache Schaltung zusammen gelötet die nach obiger Abfrage ein Relais ansteuert.
    An PortB.1 (Alarm) hab ich nen 1K Widerstand gehängt hinter dem ein Transistor kommt der mir ein 5V Relais schalten soll.
    Soweit so gut.. Nur habe ich vor dem Widerstand also an PinB.1 ca. 3.8V und nach dem Widerstand nur noch 0,56 Volt Was wahrscheinlich die Ursache für das Zappeln des Relais ist.

    Die Relais Schaltung habe ich mir auf der Seite von

    http://halvar.at/elektronik/kleiner_..._anschliessen/ geholt...

    Bitte helft mir auch wenn das Problem für Euch recht schnell zu lösen ist und der Eine oder Andere sagen wird da hättest Du auch selber drauf kommen können...

    Vielen Dank schon mal...
    Grüße aus dem Süden

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Nur habe ich vor dem Widerstand also an PinB.1 ca. 3.8V und nach dem Widerstand nur noch 0,56 Volt
    Das ist absolut normal - ca. 0,6 Volt fallen an der Basis-Emitter-Strecke ab, und der Rest am Vorwiderstand. Dafür ist er da.

    Was wahrscheinlich die Ursache für das Zappeln des Relais ist
    Kannst Du das etwas genauer beschreiben? Gibt Deine Stromversorgung genug Strom her um nicht einzubrechen, wenn das Relais anzieht?

    Hast Du die Eingänge mit PullUp- oder PullDown-Widerständen beschaltet? Oder anders - was für ein Signal liegt an den Eingängen, wenn die damit verbundenen Kontakte offen sind?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10
    Hallo Sauerbruch

    Also es hoert ssich an als ob das Relais staendig ein und aus schaltet.
    Wegen der Pulldown Widerstaende da hab ich gespart ich dachte wenn ich den Portb.2 ueber den schalter laufen lasse und auf pinb.3 abfrage wuerde es reichen und ich komme ohne Widerstand aus.
    Wegen Spannungseinbruch am Relais habe ich noch nicht gemessen weil ich stabilisierte 5V in die Schaltung gebe und das Relais ein 5V Relais ist ,,

    Gruesse aus dem Sueden

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zeig doch mal dein ganzes Programm.
    Vielleicht liegt der Fehler ja ganz woanders.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10
    Also hier mal das mini Progrämmchen.

    Es ist das Erste das ich getippelt habe.

    $regfile = "m48def.dat"
    $crystal = 8000000
    $sim


    Config Portb.1 = Output
    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Pind.4 = Input
    Config Pind.5 = Input
    Config Pind.6 = Input
    Config Pind.7 = Input
    'Ports einrichten welcher Eingang und welcher Ausgang ist.'

    Versorgungfensterschalter Alias Portd.0
    Versorgungtuerkontakt Alias Portd.1
    Alarm Alias Portb.1
    Fensterschalter Alias Pind.4
    Tuerkontakt Alias Pind.5
    Eingangrauchmelder Alias Pind.6

    'Alias Namen setzen'

    Versorgungfensterschalter = 1
    Versorgungtuerkontakt = 1
    Alarm = 0

    'Grundeinstellung'

    Hauptprogramm:
    Do
    Wait 5

    If Fensterschalter = 1 And Tuerkontakt = 1 And Eingangrauchmelder = 0 Then
    Alarm = 1
    Else
    Alarm = 0
    End If
    Wait 5
    Loop
    End 'end program

    Ich hoffe das es einigermassen ok so ist was ich gemacht habe.

    Was mir daran noch aufgefallen ist wäre folgendes..

    Wenn ich das Programm mit F8 im BascomSimulator durchlaufen lasse passt alles..

    Fensterschalter=1 Tuerkontakt =1 Eingangrauchmelder =0
    Alarm = 1

    Wenn ich es aber mit F5 starte dann wird der Ausgang genau entgegen der gewünschsten Funktion gesetzt.

    Fensterschalter =1 Tuerkontakt=1 Eingangrauchmelder= 1
    Alarm = 1

    Grüße aus dem Süden

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    wenn ich den Portb.2 ueber den schalter laufen lasse und auf pinb.3 abfrage wuerde es reichen und ich komme ohne Widerstand aus
    Das verstehe ich zwar nicht ganz, weil B.2 und B.3 irgendwie gar nicht in Deinem Code vorkommen - aber wie auch immer: Du musst sicherstellen, dass Eingangspins niemals "in der Luft" hängen. D.h. wenn Dein Schalter nach Masse geht brauchst Du einen PullUp, und wenn er nach + geht einen PullDown. Komplett unbeschaltete Eingänge sind so hochohmig, dass sie sich ein vollkommen unkalkulierbares Sammelsurium an Störimpulsen einfangen - damt kann keine Eingangs-Abfrage funktionieren...

    Btw: PullUp-Widerstände haben die Controller eingebaut - Du aktivierts sie, wenn Du das entsprechende PORT-Register auf 1 setzt.

    Also z.B. PORTB.2 = 1, wenn Du PINB.2 als Eingang abfragen mächtest.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10
    So langsam kommt Licht ins Dunkel...

    Ich versuchs nochmal anhand meines Programms nach zu vollziehen
    In meinem Fall müsste ich also da ich Pind.4 bis Pind.7 als Eingang nutze
    eine vorherige Initialisierung wie Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.7 =1 machen um den internen Widerstand zu aktivieren? Das alles natürlich nur wenn ich ein Minus Signal schalte.

    Wenn ich ein Plus Signal schalte dann muss ich mir 4 externe Widerstände nehmen sagen wir mal 1K oder weniger um die Pins Pind.4 ... Pind.7 auf 0 zu ziehen..??

    Wenn ich jetzt sagen wir mal nur mit dem "d" Register arbeite muss dann die Initialisierung auch für das "b" und "c" Register erfolgen oder spielt das dann keine Rolle?

    Danke für Eure Hilfe..

    Grüße aus dem Süden

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    In meinem Fall müsste ich also da ich Pind.4 bis Pind.7 als Eingang nutze
    eine vorherige Initialisierung wie Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.7 =1 machen um den internen Widerstand zu aktivieren? Das alles natürlich nur wenn ich ein Minus Signal schalte.
    ...absolut korrekt!

    Wenn ich ein Plus Signal schalte dann muss ich mir 4 externe Widerstände nehmen sagen wir mal 1K oder weniger um die Pins Pind.4 ... Pind.7 auf 0 zu ziehen..??
    ...fast korrekt - 50K reichen auch dicke aus; in dieser Größenordnung liegen auch die internen PullUp-Widerstände des Controllers. 1K würde halt schon 5 mA ziehen - bei vier Eingängen summiert sich das schon ganz schön...

    Wenn ich jetzt sagen wir mal nur mit dem "d" Register arbeite muss dann die Initialisierung auch für das "b" und "c" Register erfolgen oder spielt das dann keine Rolle?
    Wenn Du ganz sicher gehen willst, dass auch unbenutzte Eingänge nicht in irgendwelche undefinierbaren Zustände gehen, kannst Du auch für die restlichen I/O-Ports den PullUp aktivieren. Ist aber kein "muss".

    Eine Frage habe ich noch: In Deinem Code ist ja eine Pause von 5 Sekunden. "Zappelt" das Relais denn im 5-Sekunden-Takt? Wenn´s schneller wäre, kann es eigentlich nicht am Programm liegen, denn das macht ja ohne Wenn und Aber für 5 Sekunden Pause. Das würde dann doch eher für Instabilitäten in der Spannungsversorgung sprechen.

    Ob Ausgangsseitig alles okay ist, kannst Du ja mit einem kleinen Test-Code prüfen:


    Code:
    Config Portb.1 = Output 
    
    Do
    Toggle Portb.1
    wait 1
    Loop
    Wenn das Relais alle 1 Sekunde hin- und herschaltet, geht dieser Teil der Hardware schon mal.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10
    Guten Abend!

    Also ich habe dieses Wait eigentlich nur Spaßhalber zu Testzwecken drin gehabt. Gerade weil das Relais so dermaßen schnell geschalten hat. Da dachte ich könnte ich das mit einem Wait etwas eingrenzen bzw. nähers lokalisieren woher der Fehler kommt.
    Kurz gesagt das Relais schaltet ca 30 mal die Sekunde vom Gefühl her.


    Ich habe nun mal das Test Prg. geladen und siehe da. Das Relais schaltet zwar nicht alle Sekunde aber alle ca. 2 Sekunden. Schön brav ein und aus.

    Ich werde nun mal meinen 2 Eingängen die ich abfrage einen 50K Widerstand spendieren und dann nochmals Testen.
    Auf alle Fälle ist ja schon mal ein kleines Erfolgserlebnis da.


    Dank für Eure Hilfe

    Grüße aus dem Süden

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    10
    Hurraaaaa Es lag an den fehlenden Widerständen..

    Jetzt schnurrt alles wie es soll.

    Danke nochmals...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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