- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Einsteiger braucht Expertenunterstützung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.09.2006
    Beiträge
    7

    Einsteiger braucht Expertenunterstützung

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    Ich beschäftige mich seit ein paar Tagen mit µControllern und hatte auch noch ein paar Attiny2313 zum Spielen rumliegen.

    Vorweg:

    Das Thema Microcontroller ist für Anfänger wirklich nicht sehr leicht nachvollziehbar, trotz diverser Tutorial-Versuchen hier im Board oder bei mikrokontroller.net und an vielen Stellen wo man glaubt einen Einstieg gefunden zu haben, endet es leider in einem Codeschnipsel und man ist verwirrter als vorher. Allein die drei Programmiersprachen tuen ihr übriges...

    Zum Problem:

    Ich habe an einen Attiny2313 an Port D2 ( ist der als Eingang überhaupt geeignet?) einen Taster über einen 10K Widerstand an VCC und an GND angeschlossen und an den Ports B1,2,3 jeweils eine LED über Vorwiderstand an VCC.

    Ich möchte:

    Mit dem Taster Led1 anschalten, wenn die Tastendrucklänge < 100 ist und diese sollte angeschaltet bleiben, bis zum nächsten Tastendruck (egal ob kurz oder lang)

    Ist der Tastendruck > 100 sollen Led1 und Led3 eingeschaltet werden und ebenfalls eingeschaltet bleiben, bis zum nächsten Tastendruck.

    Tja ich habe bislang ausprobiert:

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    
    Config Pind.2 = Input                                       'Taster Eingang
    
    Config Portb.1 = Output                                     'Led1 aus
    Config Portb.2 = Output                                     'Led2 aus
    Config Portb.3 = Output                                     'Led3 aus
    
    Taster Alias Pind.2                                         'Taster def.
    Led1 Alias Portb.1                                          'Led 1 def.
    Led2 Alias Portb.2                                          'Led 2 def.
    Led3 Alias Portb.3                                          'Led 3 def.
    
    Led1 = 1
    Led2 = 1
    Led3 = 1
    
    Declare Sub Stelle1                                         'Status1
    Declare Sub Stelle2                                         'Status2
    
    Debounce Taster , 0 , Stelle1 , Sub
    
    Do
    Stelle1:                                                    'Hauptschleife
    If Taster = 0 Then Led1 = 0 Else Led1 = 1
    If Taster = 1 Then Return Else Gosub Stelle2
    
    Stelle2:
    Waitms 80
    If Taster = 0 And Led1 = 0 Then Led3 = 0 Else Led3 = 1
    
    Loop
    Schaltet die LED's eigenlich so, wie ich möchte, nur bleiben diese nicht eingeschaltet...

    Mein neuer Ansatz, klappt irgendwie noch gar nicht

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    
    Config Pind.2 = Input                                       'Taster Eingang
    
    Config Portb.1 = Output                                     'Led1 aus
    Config Portb.2 = Output                                     'Led2 aus
    Config Portb.3 = Output                                     'Led3 aus
    
    Taster Alias Pind.2                                         'Taster def.
    Led1 Alias Portb.1                                          'Led 1 def.
    Led2 Alias Portb.2                                          'Led 2 def.
    Led3 Alias Portb.3                                          'Led 3 def.
    
    Led1 = 1
    Led2 = 1
    Led3 = 1
    
    
    Dim Tastendrucklaenge As Word
    
    Do
    
    Pulsein Tastendrucklaenge , Pind , 2 , 0
    
    If Tastendrucklaenge > 20 And Tastendrucklaenge < 100 Then Toggle Led1
    If Tastendrucklaenge > 150 Then Led3 = 0 Else Led3 = 1
    
    Loop
    Ich hoffe, mir kann jemand von Euch Experten dabei behilflich sein [-o<

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Erste Progs

    Hallo Phil,

    zum 1. Beispiel:
    Da gibt's durch unklare Unterprogramm-Strukturen (Return, Gosub Stelle2) keinen Ablauf, den man nachvollziehen könnte.

    Unterprogramme gehören nicht in eine DO..LOOP Schleife, sondern ans Programmende:

    DO
    ...
    Gosub Unterprog1
    ...
    Gosub Unterprog2
    ...
    LOOP
    END


    Unterprog1:
    ...
    Return

    Unterprog2:
    ...
    Return


    Zum 2. Beispiel:
    Schon viel besser!
    Aber: Pulsein zählt 10uS Einheiten. Du mußt schon fantastische Reflexe haben, wenn du da genau zwischen 200 und 1000uS lang eine Taste drücken willst!

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.09.2006
    Beiträge
    7
    Hallo Dirk,

    vielen Dank für Deine Antwort, dass hat mich schon sehr viel weiter gebracht - war mir mit den µs nicht klar, ich war von ms ausgegangen

    Jetzt funktioniert das schon fast so, wie ich das haben möchte, nur das Led1 nicht aufleuchtet, wenn Led2 aufgerufen wird und Led 2 auch nur erlischt, wenn ein weiteres langes Signal folgt - ...aber schon verdammt nah dran =D>

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    
    Config Pind.2 = Input                                       'Taster Eingang
    
    Config Portb.1 = Output                                     'Led1 aus
    Config Portb.2 = Output                                     'Led2 aus
    Config Portb.3 = Output                                     'Led3 aus
    
    Taster Alias Pind.2                                         'Taster def.
    Led1 Alias Portb.1                                          'Led 1 def.
    Led2 Alias Portb.2                                          'Led 2 def.
    Led3 Alias Portb.3                                          'Led 3 def.
    
    Led1 = 1
    Led2 = 1
    Led3 = 1
    
    
    Dim Tastendrucklaenge As Word
    
    Do
    
    Pulsein Tastendrucklaenge , Pind , 2 , 0
    
    If Tastendrucklaenge > 1000 And Tastendrucklaenge < 5000 Then Toggle Led1
    If Tastendrucklaenge > 5000 Then Toggle Led3
    
    Loop

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    13.09.2006
    Beiträge
    7
    Hallo

    Noch ein kleiner Nachtrag, bin ja blöd brauch ja nur den kompletten B-Port toggeln. Jetzt bleibt nur noch das Problem des Ausschaltens auch über einen kurzen Tastendruck.

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    
    Config Pind.2 = Input                                       'Taster Eingang
    
    Config Portb.1 = Output                                     'Led1 aus
    Config Portb.2 = Output                                     'Led2 aus
    Config Portb.3 = Output                                     'Led3 aus
    
    Taster Alias Pind.2
    Led Alias Portb                                             'Taster def.
    Led1 Alias Portb.1                                          'Led 1 def.
    Led2 Alias Portb.2                                          'Led 2 def.
    Led3 Alias Portb.3                                          'Led 3 def.
    
    Led1 = 1
    Led2 = 1
    Led3 = 1
    
    
    Dim Tastendrucklaenge As Word
    
    Do
    
    Pulsein Tastendrucklaenge , Pind , 2 , 0
    
    If Tastendrucklaenge > 200 And Tastendrucklaenge < 3000 Then Toggle Led1
    If Tastendrucklaenge > 5000 Then Toggle Led
    
    Loop

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Problem mit LEDs

    Hallo Phil,

    Jetzt bleibt nur noch das Problem des Ausschaltens auch über einen kurzen Tastendruck.
    Du kriegst das hin!!

    Aber denk an deine Reaktionszeiten und an deinen Zeigefinger:
    Deine LED1 soll toggeln bei einem Tastendruck zwischen 2ms (= 200 x 10us) und 30ms. Das sind immer noch Tausendstel Sekunden!
    Ich will dir nicht zu nahe treten: Viel kürzer wirst du das aber nicht hinkriegen (es sei denn, du bist Superman).

    Gruß Dirk

Berechtigungen

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

12V Akku bauen