Hallo zusammen!
Wie schon im Hardwarebereich angedeutet, benötige ich hier nun ein paar Ratschläge bezüglich der Programmierung meines ATtiny25.
Da ich früher schon mal ein wenig mit µCs machen mußte(Im Rahmen einer Fortbildung), lag mir noch in Erinnerung, dass bei Tastern z.B. eine Entprellung stattfinden sollte, damit ein Tastendruck auch zuverlässig erkannt wird.
In Bascom scheint ja dafür die Funktion "debounce" direkt implementiert zu sein, zumindest habe ich das so verstanden!?
Also fange ich folgendermaßen an:
Wie löse ich jetzt die Abfrage der Taster? Einfach über Debounce und dann in das passende Unterprogramm oder löst man das über einen externen Interrupt? (PCINTx), damit der Taster auch definitiv erkannt wird?Code:$regfile = "atTiny25.dat" $crystal = 1000000 $sim $hwstack = 24 $swstack = 16 $framesize = 32 'by default the tiny25 has a 8 MHz internal osc. 'and by default the internal 8 divider is enabled resulting in 1 Mhz clock freq. Config Debounce = 100 Config Pinb.1 = Input Config Pinb.2 = Input Config Pinb.5 = Output Config Pinb.3 = Output
Entweder ist Ausgang 1 aktiv oder es sind beide Ausgänge aktiv, bzw. beide aus. Nur Ausgang 2 an geht nicht!
Taster 1 soll Ausgang 1 einschalten, aber auch Ausgang 1+2 ausschalten können. Taster 2 soll Ausgang 1+2 gleichzeitig einschalten und ebenfalls auch ausschalten können. Zusätzlich soll Taster 2 aber auch nur Taster 1 abschalten können.
Vom Prinzip her so: ?
Dazu kommt dann ein analoger Eingang, an dem 5V über ein 10K Poti anliegen. Dieser Eingang soll die automatische Ausschaltverzögerung steuern. Also wenn z.B. Taster 1 benutzt wird, soll Ausgang 1 durchschalten und gleichzeitig der Timer gestartet werden. Je nach anliegender Spannung am analogen Eingang, soll dann Ausgang 1 abgeschaltet werden, falls die Abschaltung nicht manuell über einen Taster erfolgt.Code:Do Debounce Pinb.1 , 1 , Hoch , Sub 'Taster 1 Debounce Pinb.2 , 1 , Runter , Sub 'Taster 2 Loop Hoch: If Portb.5 = 0 And Portb.3 <> 1 Then Set Portb.5 Else Reset Portb.5 Reset Portb.3 End If Return Runter: If Portb.5 = 0 And Portb. = 0 Then Set Portb.3 Wait 100 Set Portb.5 Else Reset Portb.5 Reset Portb.3 End If Return End
Die Zeit soll von ca. 2sec bis ca. 90sek einstellbar sein, wobei die Obergrenze eigentlich egal ist nur mehr als 2min wird nicht benötigt.
Dazu dann in der Do AnweisungCode:Config Adc = Single , Prescaler = Auto Start Adc Dim Spannung As Integer
um den aktuellen Wert zu haben?Code:Spannung = Getadc(2)
Wie bastle ich dann aber die Zeitfunktion zur Abschaltung? Das hier habe ich gefunden
http://halvar.at/elektronik/kleiner_...dc_mit_getadc/
weiß aber nicht so recht wie ich das einbauen muss. Vom Prinzip her müßte ich doch beim setzen eines Ausgangs den Timer starten und dann über den Timerinterrupt zählen. Über den analogen Eingang lege ich mit der Spannung die Zeit fest. Nur wie bringe ich das zusammen??
Würde mir da vielleicht jemand einen Tip geben und auch zum Rest etwas sagen?
Gruß
Jörg







Zitieren

Lesezeichen