Tetrapack
14.11.2008, 18:28
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:
$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
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?
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: ?
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
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.
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.
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Spannung As Integer
Dazu dann in der Do Anweisung
Spannung = Getadc(2)
um den aktuellen Wert zu haben?
Wie bastle ich dann aber die Zeitfunktion zur Abschaltung? Das hier habe ich gefunden
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_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
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:
$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
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?
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: ?
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
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.
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.
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Spannung As Integer
Dazu dann in der Do Anweisung
Spannung = Getadc(2)
um den aktuellen Wert zu haben?
Wie bastle ich dann aber die Zeitfunktion zur Abschaltung? Das hier habe ich gefunden
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_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