Ich habe eine Frage zu den KD-Treibern. Es handelt sich dabei, um diesen Treiber. Der Schaltplan sieht so aus.
Nun meine Frage dazu. Wie wird der Moduswechsel, Softwaretechnisch unter Bascom realisiert. Ich hatte immer gedacht, das dafür ein seperater Eingang genutzt wird, aber das scheint hier ja nicht der Fall zu sein. Habt ihr eine Erklärung da für mich.
Moduswechsel bei KD-Treibern, wie wird das Softwaremäßig gelöst
-
-
Ich vermute mal dass ist wie bei quasi allen Taschenlampentreibern gelöst.
Das Ding merkt sich in welchem Zustand es war und schaltet einfach einen höher wenn es wieder angeschaltet wird.
Wenn die Spannung zu lange weg war (länger als ein paar Sekunden ausgeschaltet) vergisst der Treiber wo er war und fängt wieder im Default-Zustand an.
Das wäre softwaretechnisch ja nicht das Problem, die einzige Schwierigkeit besteht dadrin rauszufinden wie lang der Tiny die Daten ohne Spannung hält und ob evtl. ein Stützkondensator irgendwo mit bei muss. -
Hmm und wie stellt er fest in welchem Zustand er war, das verstehe ich halt nicht, wie bekommt er mit, das die Spannung weg war.
-
Es ist ja ein Kondensator + Diode verbaut ... Ich denke das es darüber realisiert wird, das er erkennt wenn die Versorgungsspannung abbricht. Wird der Kondensator sehr klein gewählt, dann entläd dieser so schnell, dass man nur zwischen den Modi schalten kann. Dauerhaft merken tut er sich die Helligkeitsstufe aber nicht.
-
Der ATTiny 13A hat ein 64 Byte großes EEprom kann darin also den letzen Modus abspeichern und beim nejustart auslesen um so wieder den letzten Modus zu setzen.
mfg
Falo -
Ja Diode und Kondensator sind verbaut, der Plus geht nur zur Led und zur Diode und geht nach der Diode zum pin8 des µc. Kondensator liegt dann zwischen pin4 und pin8 und wie stellt er da fest das die Spannung weg war, für mich immer noch nicht erklärbar. Pin7 ist der Akkuwächter, vermute ich.
-
Ich habe selbst erhlich gesagt nicht so wirklich verstanden Das hier wurde mal als neue Firmware vorgeschlagen:
Code
Alles anzeigen$regfile = "attiny13.DAT" $crystal = 4800000 $hwstack = 32 $swstack = 8 $framesize = 16 Portb = &B00111001 Tccr0a = &B00100011 Tccr0b.1 = 1 Admux = &B01000001 Adcsra = &B11000110 Dim U1adc As Word Dim U2adc As Word Dim Index As Byte Dim Count As Byte Dim Modul As Word '********************* If Mcusr.0 = 0 Then Powerdown Else Mcusr.0 = 0 End If Waitms 100 Readeeprom Index , 63 Modul = Index.7 Reset Index.7 If 62 < Index Then Index = Modul Goto Init End If Readeeprom Count , Index Incr Count If Count = 0 Then Init: Incr Index Count = Modul Writeeeprom Count , Index Index.7 = Modul Writeeeprom Index , 63 Else Writeeeprom Count , Index End If '**************************** Modul = Modul + 2 Index = Count Mod Modul Count = 255 If Index = 0 Then Readeeprom Count , 0 End If If Modul = 3 Then If Index = 1 Then Readeeprom Count , 1 End If End If '************************ U1adc = 1000 Ddrb.1 = 1 Ocr0b = Count Do If Pinb.3 = 0 Then Count = Count - 1 Gosub Flash Writeeeprom Count , Index End If If Pinb.4 = 0 Then Count = Count + 16 Gosub Flash Writeeeprom Count , Index End If If Pinb.0 = 0 Then Readeeprom Count , 63 Toggle Count.7 Gosub Flash Bitwait Pinb.0 , Set Writeeeprom Count , 63 Wait 1 End If Waitms 50 U2adc = U1adc Shift U1adc , Left , 5 U1adc = U1adc - U2adc U1adc = U1adc + Getadc(1) Shift U1adc , Right , 5 If U1adc < 470 Then Gosub Flash Decr Count If Count = 0 Then Ddrb.1 = 0 Powerdown End If Elseif U1adc < 550 Then ' If Modul < 4 Then Gosub Flash Gosub Flash Gosub Flash End If Modul = Modul + 64 End If Loop '********************* Flash: Ocr0b = 0 Waitms 30 Ocr0b = Count Waitms 400 Return End '******************************************************
-
HI,
für diesen treiber ? Woher hast du das?
mfg
-
ja denke das sollte funktionieren. Hier die komplette Anleitung (es gab mal noch eine bessere mit noch umfangreicherer Software, finde ich aber grad nicht) http://www.messerforum.net/sho…hp?p=664718&postcount=52:
-
Hmm das muß ich mier mal zu gemüte ziehen, da bekomme ich dann auch raus, wie es funktionieren tut. Ich hatte immer gedacht das ein flanken Wechsel an einem Eingangspin gebraucht wird, aber das scheint ja hier anders zu sein. Ich danke euch, für eure Bemühungen und wünsche ein schönes Wochenende
-
Hallo,
als Autor des Bascom-Kauderwelsch da oben, kann ich ja einfach ein paar erklärende Worte dazu schreiben...
Wenn der Tailcap-Schalter gedrückt wird, sind in weniger als einer Millisekunde die Versorgungsspannung und mit ihr alle SRAM-Daten versackt. Da sich der 0,1µF Stützkondensator auch über den 13K Spannungsteiler entlädt, hilft auch nicht wenn der Tiny schlafen geschickt wird. Beim nächsten Erwachen kann er sich weder an die Länge der Unterbrechung erinnern, noch in welchen Modus er davor war.
Daher braucht man das EEPROM, ich lasse dort bei jedem Start den Wert einer Zelle auslesen und mit +1 wieder beschreiben. Bei Überlauf kommt die nächste Zelle dran, eine dient als fest zugewiesenes "Lesezeichen".
Der Modus wird dann per Modulo aus dem Wert "extrahiert".
(Alles wegen der begrenzten EEPROM-Schreibzyklen: min. 100.000 / Zelle)Die Chinesen machen's wohl auch nicht anders, nur zweifelhaft ob da so ein aufwendiger Zähler benutzt wird, den nicht allzu üppig vorhandenen Flash kann man schließlich auch mit lauter Blink-Spielerei vollpacken...
Memory funktioniert dort m.E. so, daß nach ca. 2 Sekunden ein weiterer Schreibvorgang den direkt beim Start geschriebenen Wechsel wieder "rückgängig" macht.Wenn man die Hardware so auf- bzw. umbaut, daß der Tiny den zur kurzen Schalterbetätigung nötigen Stromausfall übersteht (oder besser noch der Schalter ihm gar nicht erst den Strom wegnimmt), hat man natürlich viel bessere Möglichkeiten und braucht das nicht so umständlich mit EEPROM-Zählerei realisieren.
MfG Manne