-         

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

Thema: Benötige Hilfe bei Programmierung mit BASCOM und ATtiny13

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8

    Benötige Hilfe bei Programmierung mit BASCOM und ATtiny13

    Anzeige

    Hallo zusammen,
    könnt Ihr mir helfen dieses zu realisieren.
    Besitze einen ATtiny13 und möchte am Eingang einen Reedkontakt
    anschließen. Wenn dieser betätigt wird, soll der Ausgang für eine genau
    definierte Zeit geschlossen werden z.B. 100ms, egal wie lange der
    Reedkontakt am Eingang geschlossen ist. Optimal wäre auch noch wenn die
    Zeit eingestellt werden könnte von Betätigen des Reedkontakt bis zum
    aktivieren des Ausgangs. Z.B. ich betätige den Reedkontakt am Eingang
    dann soll eine Verzögerung von 20ms stattfinden bis der Ausgang dann für
    100ms aktiv wird. Wahrscheinlich müsste der Eingang (Reedkontakt) entprellt werden.
    Leider bin ich beim Schreiben eines Code nicht so fit. Aufbau bzw Programmieren des uC ist kein Problem.

    Würde mich sehr freuen, wenn mir jemand beim erstellen eines Code behilflich sein könnte.

    Vielen Dank

    Gruß Markus

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    der 13er hat pin change interrupts auf allen 5 Beinchen die er als
    IO verwenden kann.
    pin change bedeutet bei wechsel des Status, also high nach low oder low nach
    high kann der ausgelöst werden. nun musste nur noch wissen welcher pegel
    zum zeitpunkt des interrupts eben anliegen bleibt. und welcher pin des ports
    den interrupt ausgelöst hat.
    Such mal nach PCINT hier im Forum, da gibts da democodes drüber

    Dann noch n paar kleine Warterunden ... waitms z.B. zum Entprellen und
    erzeugen Deines Impulses und fertig ist die Laube
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: Benötige Hilfe bei Programmierung mit BASCOM und ATtiny1

    Hallo Markus!

    Ein dazu passendes Programm könnte in etwa so aussehen (ungetestet):
    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 24
    $swstack = 10
    $framesize = 24
    
    Eingang Alias Pinb.0
    Ausgang Alias Portb.1
    
    'DEBOUNCE konfigurieren: Nach Erkennen einer Zustandsänderung am Eingang, wird
    'nach 20 ms noch einmal geprüft ob der Zustand stabil geblieben ist.
    Config Debounce = 20       '20 ms
    
    
    Do
       'Wenn der Eingang von LOW nach HIGH gezogen wird, dann wird das
       'Label *Eingang_wurde_geschaltet* angesprungen.
       Debounce Eingang , 1 , Eingang_wurde_geschaltet , Sub
    Loop
    End
    
    
    Eingang_wurde_geschaltet:
    
       'DEBOUNCE wartet bereits 20 ms um den Eingangszustand genau zu erkennen.
       'Wenn zusätzlich noch etwas gewartet werden soll, dann kann man hier
       'ein ``WAITMS`` unterbringen.
    
       'Ausgang einschalten
       Ausgang = 1
    
       '100 ms warten
       Waitms 100
    
       'Ausgang ausschalten
       Ausgang = 0
    
    'Zur Hauptschleife zurückkehren
    Return
    Bei diesem Programm muss der Eingang mit einem Pulldown-Wiederstand (ca. 10 kOhm) nach GND gezogen werden, so dass ein stabiler Zustand garantiert werden kann. Der Reed-Schalter muss den Eingang nach VCC ziehen.

    Würde man es umgekehrt machen, dann könnte man auf den externen Pulldown-Widerstand verzichten und den eingebauten Pullup-Widerstand aktivieren.

    mfg
    Gerold
    :-)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8
    Vielen Dank für Deine Unterstützung.
    Ich werde es heute gleich mal testen.

    Danke Viele Grüße Markus

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8
    Vielen Dank,
    funktioniert schon sehr gut. Vielen Dank für den Code. Ein kleines Problem noch. Teilweise fällt der Ausgang nicht nach der vorgegebenen Zeit ab, sondern bleibt permanent an. Kann man da noch was machen?
    Kann man am Anfang auch eine Routine zum entprellen einbringen? Anstelle von Debounce.

    Gruß Markus

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Hallo Markus!

    Bitte ausprobieren (=ungetestet):
    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 24
    $swstack = 10
    $framesize = 24
    
    Eingang Alias Pinb.1       'INT0
    Ausgang Alias Portb.0
    Config Ausgang = Output
    
    Config Int0 = Rising
    On Int0 On_int0
    
    Enable Int0
    Enable Interrupts
    
    
    Do
       !NOP
    Loop
    End
    
    
    On_int0:
       Waitms 20
       Ausgang = 1
       Waitms 100
       Ausgang = 0
    Return
    Achtung! Bedingt durch den INT0 ändert sich die Anschlussbelegung. Eingang und Ausgang wurden vertauscht. Pulldown-Widerstand nicht vergessen!

    mfg
    Gerold
    :-)

    PS: Mich wundert ja, dass der vorherige Code überhaupt funktioniert hat -- habe ich doch ``Config Ausgang = Output`` vergessen. :-)

    .

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8
    Danke
    Die beiden Config Zeilen hab ich gestern selber noch eingefügt. Macht ja nix. Freue mich dass man hier so gut unterstützt wird. Ich werde das Programme heute gleich testen und Rückmeldung geben.

    Gruß Markus

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8
    Hallo,
    hab den Code ausprobiert. Funktioniert genau so, wie ich es mir vorgestellt habe. Jedoch hab ich noch das Problem, dass der Ausgang teilweise hängen bleibt und nicht abfällt. Habe am Ausgang des uC einen solid state Relais S202S02 mit 240 Ohm Vorwiderstand. An was kann das liegen? Denke nicht dass es an dem solid state liegt. Hab auch schon einen BC547 und ein mech. Relais verbaut gehabt. Dort hatte ich das gleiche Problem. Was könnte man noch im Code machen, dass er Eingang sicher abfällt. Oft fällt der Ausgang erst dann ab, wenn man den Eingang erneut betätigt. Vielleicht hängt es auch damit zusammen, wenn der Eingang nicht sauber betätigt wird.

    Vielen Dank

    Gruß Markus

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Zitat Zitat von Mage1983
    Oft fällt der Ausgang erst dann ab, wenn man den Eingang erneut betätigt.
    Hallo Markus!

    Also ganz ehrlich -- ich kann mir nicht vorstellen, warum der Ausgang nicht zurückschalten sollte. Wenn der ATtiny13 abgestürzt wäre, dann dürfte ein erneutes Betätigen des Schalters auch nichts mehr bringen -- tut es aber.

    Dann lass und mal die Symptome behandeln -- ohne auf die Ursache einzugehen. Lass die Hauptschleife den Ausgang ständig neu zurücksetzen:
    Code:
    Do
       Ausgang = 0
       !NOP
    Loop
    End
    Und dann entprellen wir mal den Eingang mit einem Keramikkondensator. So wie hier in diesem Bild:



    Statt dem 10n Kondensator kannst du es ruhig mal mit 100n versuchen.

    Damit nicht sofort nach dem Starten des Programmes der Interrupt ausgelöst wird, musst du den µC ein wenig warten lassen. Das ganze Programm könnte dann in etwa so aussehen:
    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 24
    $swstack = 10
    $framesize = 24
    
    Eingang Alias Pinb.1       'INT0
    Ausgang Alias Portb.0
    Config Ausgang = Output
    
    WAITMS 100
    
    Config Int0 = Rising
    On Int0 On_int0
    
    Enable Int0
    Enable Interrupts
    
    
    Do
       Ausgang = 0
       !NOP
    Loop
    End
    
    
    On_int0:
       Waitms 20
       Ausgang = 1
       Waitms 100
       Ausgang = 0
    Return
    Mehr fällt mir im Moment nicht ein.

    mfg
    Gerold
    :-)

    Edit: Sorry, war etwas abgelenkt. Es fehlte der Stützkondensator.

    .

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2006
    Beiträge
    8
    Danke. Werde ich morgen gleich mal ausprobieren.
    Gehört Pin1 (Reset) auf +5V? Bis jetzt hängt dieser Pin bei mir nur am ISP.
    Melde mich morgen wieder und gebe Bescheid.

    Gruß Markus

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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