Hallo Tetrapack,
die Zeitschaltung mit Attiny13 auf meiner Hompage könnte dir da eventuell etwas weiterhelfen. Zwar ist die Schaltung nicht identisch mit deiner, allerdings handelt es sich hierbei auch um eine Ausschaltverzögerung.
Gruß Flo
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
Hallo Tetrapack,
die Zeitschaltung mit Attiny13 auf meiner Hompage könnte dir da eventuell etwas weiterhelfen. Zwar ist die Schaltung nicht identisch mit deiner, allerdings handelt es sich hierbei auch um eine Ausschaltverzögerung.
Gruß Flo
Hallo Flo,
vielen Dank für den Tip!! Sieht auf den ersten Blick schon mal klasse aus
Dann fehlt mir nur noch die Sache mit den Fusebits ... das hatte ich noch nicht aufm Plan, dachte "einfach überspielen und fertig" ^^
Gruß
Jörg
Kommt natürlich jetzt drauf an, wie du deine Schaltung genau programmierst bzw. aufbaust. Wenn du die Schaltung so aufbaust wie auf meiner Hompage und du einen neuen Attiny13 nimmst, dann sind die Fusebits schon richtig eingestellt, da es sich bei den Einstellungen für die Zeitschaltung um die Default Einstellungen handelt.Dann fehlt mir nur noch die Sache mit den Fusebits ... das hatte ich noch nicht aufm Plan, dachte "einfach überspielen und fertig" ^^
Ansonsten musst du natürlich die Fusebits anpassen.
Dazu mal ein nützlicher Link.
Gruß Flo
Ne, die Schaltung sieht etwas anders aus .. und benutzen werde/wollte ich einen Tiny25.
Der Link ist interessant ^^ ... auf was muß man da denn achten?? Kann ich die Voreinstellungen nutzen, nur zusätzlich noch einen Haken bei PB5 (Reset), da es kein Resetpin ist sondern ein I/O ?
Schon klar, dass deine Schaltung etwas anders wird.Ne, die Schaltung sieht etwas anders aus .. und benutzen werde/wollte ich einen Tiny25.
Davon rate ich dir ab, einmal den Reset Pin als I/O Pin gesetzt, lässt sich der Controller, soweit ich mich erinnern kann, nur noch über einen Parallelprogrammer und nicht mehr über ISP programmieren.Kann ich die Voreinstellungen nutzen, nur zusätzlich noch einen Haken bei PB5 (Reset), da es kein Resetpin ist sondern ein I/O ?
Du benötigst ja nach deiner Beschreibung folgende I/O Pins:
2 x Ausgang
2 x Eingang - Taster
1 x ADC - Potentiometer
oder hab ich einen übersehen?
Der Attiny25 hat doch 6 I/O Pins mit Reset, da musst du doch den Reset nicht benutzen!
Solltest du noch einen Pin mehr benötigen, könntest du folgendes in Betracht ziehen:
Du könntest an einen ADC auch zwei Taster anschließen und die eingelesenen ADC_Werte z.B über Select Case auswerten. Ich hab dir mal ein Beispiel angehängt, wie du zwei Taster an einen Controller ADC anschließen könntest. Das Beispiel ist so ausgelegt, dass immer nur 1 Taster betätigt wird, ansonsten findet keine korrekte Auswertung statt. Soll auch ein Ereignis beim gleichzeitigen drücken beider Taster ausgeführt werden, müsste die Tastermatrix nochmal verändert werden.
Soll das heißen: Zusätzlich soll Taster 2 aber auch nur Ausgang 1 abschalten können?Zusätzlich soll Taster 2 aber auch nur Taster 1 abschalten können.
Gruß Flo[/quote]
Danke für den Tip, aber dadurch das das Layout fertig ist und ich nur den PIC gegen einen AVR austauschen möchte, habe ich keine andere Wahl als PB5 zu einem I/O zu machen. Sorry falls ich das missverständlich geschrieben hatte!
Das mit dem Resetproblem habe ich auch schon gefunden, das werde ich wohl in Kauf nehmen müssen ... aber leider läßt Ponyprog ein Deaktivieren nicht zu(zumindest die Version die ich jetzt habe) .. das Feld ist und bleibt ausgegraut. Gibt es da einen Trick?
*edit*
Ich habe mal dein Programm in Bascom geladen und versuche mich gerade am Simulator. Kann es sein, das der Durchlauf im Simulator wesentlich langsamer ist als in Echtzeit? Kann man den Simulator auch auf Echtzeit einstellen?
Jörg
Im Moment kann ich dir die Frage nicht beantworten, da ich die Zeitschaltung bisher nur in Echtzeit laufen hab. Ich teste meine Programme zu 100% direkt an Hardware. Wenn es die Zeit zulässt werd ich mir das ganze die Woche mal im Simulator anschauen.Ich habe mal dein Programm in Bascom geladen und versuche mich gerade am Simulator. Kann es sein, das der Durchlauf im Simulator wesentlich langsamer ist als in Echtzeit? Kann man den Simulator auch auf Echtzeit einstellen?
Gruß Flo
Lesezeichen