Frohes Fest euch allen!
Mfg
Harry
Hi, Mic
Naja, unscheinbarer 8-Pinner ist nicht ganz richtig!
KnowHow des Programmierers ist wohl die erste Instanz!
Mfg Harry
Frohes Fest euch allen!
Mfg
Harry
Hallo an alle.
Hab mich an den Code von "Radbruch" gehängt, weil ich genau
solche Tinys hier habe und nen kleienen Hand RC5 Sender bauen will.
Hier sollte man natürlich auf Batteriesparen setzen.
Also Tiny13 in Sleep legen.
Mit den richtigen Registern angesteuert auch kein Problem.
Mcucr = &B00110000 'Sleepmodus : 00110000 = Powerdown !
Pcmsk = &B00011000
Gimsk = &B00100000
Gifr = &B00100000
Aber : Wo in dem Code kann ich nen Interrupt auslösen lassen
bzw. in den Code durch den Irq einspringen ? (PcInt0)
Command ändern mit anderer Taste ist ja kein Hexenwerk.
Nur das Schlafen legen.....![]()
Denn mit "Senden_aktiv = 0" wird der Träger munter
weiter gesendet.
Also WO unterbrechen, dass
a: der String fertig gesendet wird, und
b: der µC an der richtigen Stelle wieder aufwacht ?
Eventuell Probleme mit Timer0 ? oder den ASM Code ?
Gruß Pizzakurier
PS: guten Rutsch an alle =D>
Hallo pizzakurier
Mit den Sleep-Modi der tinys habe ich noch keine Erfahrungen. Das Erste worüber ich jetzt im Datenblatt (Seite 27) gestolpert bin:
Also einfach einen Reset auslösen und alles beginnt von vorne. Das würde wunderbar funktionieren, wenn du nur eine feste Codesequenz senden willst. Ein Taster an Pin1 gegen GND (eventuell noch ein PullUp gegen Vcc) würde den tiny aufwecken und den Code senden lassen.If a reset occurs during sleep mode, the MCU wakes up and executes from the Reset Vector.
Nachdem der Code gesendet wurde (wir senden nur einmal) könnte man z.B. hier schlafen gehen:
(nur theoretisch, noch nicht getestet)Code:... 'endlos wiederholen' $asm sleep $end Asm Goto Label ...
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Genau.Zitat von radbruch
Auf das bin ich noch garnicht gekommen.
Ich kann einen Pinchange-Interrupt als Reset ausführen.
Dann im Index oben die Taste auswählen, gewünschten Command setzen
und wie Du sagtest unten wieder schlafen legen.
Muss mal kucken ob ich nen PCint. als Reset beschalten kann....
Muss ich sofort kucken und testen....
Gruß Pizzakurier \/
@EDIT
Bei Einstellungen diesen Code einfügen :
Direkt unter Label das hier :Code:Config Pinb.1 = Output 'ocr0b Config Pinb.2 = Output 'led Config Pinb.3 = Input 'taste down Config Pinb.4 = Input 'taste up Portb = &B00011000 Enable Interrupts 'enable global ints On Pcint0 Int Mcucr = &B00110000 'Sleepmodus : 00110000 = Powerdown ! Pcmsk = &B00011000 Gimsk = &B00100000 Gifr = &B00100000
und zu guter letzt, das Int-Sub Programm:Code:Label: Enable Pcint0 !sleep
Damit wird der komplette RC5 gesendet und schläft dann ein.Code:$end Asm Return Int: 'Wenn Interrupt ausgelöst wird, (Taste gedrückt) Disable Pcint0 'schalte INT0 ab Return 'hoch zur Hauptschleife nach Befehl Sleep
Bei mir liegen 2 Taster auf PB3 und PB4 mit jeweils Pullup aktiv.
Jetzt muss ich nur noch die 2 Taster auswerten für verschiedene Befehle
Guten Rutsch an alle BASCOMer (und der Rest natürlich auch)
Pizzakurier
So - Hier nun das Endergebnis
Platine:
Bild hier
gesamte Schaltung:
Bild hier
und die Behausung:
Bild hier
Layout:
Bild hier
Bascom Projekt gibts hier :
http://www.6c33.de/avr/handsender_la...ender_lang.bas
und für Sprint-Layout 4 das Layout
http://www.6c33.de/avr/handsender_la...ender_lang.lay
(rechtsklich - Ziel speichern unter)
Viel Spass damit.
Schaltplan brauchts für das hier glaube ich nicht![]()
Viele Grüsse und ein gutes neues Jahr 2008
Pizzakurier
Hallo pizzakurier
Sehr schön gelöst mit dem Sleep (das @Edit hast du ja recht heimlich angehängt). Verblüffend schlank umgesetzt und natürlich vor dem Senden eingebaut. Super. Und das es auch mit 3V funktioniert hatte ich schon vermutet. Mich würde noch der Wert für den verwendeten Vorwiderstand für die IR-LED interessieren.
Nun haben wir die Basis für alle möglichen kleinen RC5-Anwendungen komplett. Man könnte die Sendecodes noch als #defines im Programmkopf unterbringen und das Ganze noch etwas ordentlicher dokumentieren. Aber das kann auch die Aufgabe für die nachfolgenden Anwender sein.
Noch eine kleine Anregung: Wenn man die zu sendenden Codes im EEProm ablegt, kann man für alle, die nicht in Bascom programmieren, eine fertige Hex-Datei anbieten. Zusammen mit deinem Projekt wäre das ein wohl einen Eintrag im RN-Wiki wert. Das sollten aber die BASCOMer selbst machen, denn für mich war das nur ein "Gastspiel".
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo Mic.
Danke für die Blumen.Zitat von radbruch
Der Vorwiderstand ist für eine LD271 und hat bei mir 47 Ohm.
Ein Wehrmutstropfen bleibt noch : Der RC5 code wird nur ein bis 2x gesendet und der Tiny schläft bei gedrückter Taste ein.
Muss mal probieren, ob ein
"if portb.1=1 and portb.2=1 and portb.4=1 then ..."
vor dem schlafengehen das ganze eventuell das ganze dazu bewegt, dauerhaft bei gedrückter Taste zu senden.
Dann wäre da noch das Toggle-Bit.
Aber das kann man relativ einfach mit dem Befehl "toggle" und einer Bitmaske realisieren. Braucht man für "eigene" Projekte aber kaum)
Interessant ist noch die RC5 Emppfangsgeschichte. Muss mal probieren, ob das mit "getrc5" in Basacom mit dem Tiny13 auch geht . ( braucht glaube ich nur Timer0) Er muss ja nicht demodulieren (macht der Tsop)
Die Geschichte mit dem Eeprom hatte ich mir auch schon überlegt.
Wäre Sinnvoll, wenn man z.B. noch ne UART hätte zum seriell ändern.
Werd aber nu mal das Dauersenden bei Tastendruck probieren.
Melde mich.
Gruß Bernhard.
PS: Hat´s in Stuggitown auch Schnee ?
Heut N8 hats bei uns (Bad Boll) ca. 3cm (hoho) hingeworfen)
Sodele.Werd aber nu mal das Dauersenden bei Tastendruck probieren.
Dauersenden geht nu.
der Code vor dem Sleep funktioniert.
Somit sendet der Code dauerhaft, solange eine Taste gedrückt wird.Code:Label: If Pinb.1 = 1 And Pinb.2 = 1 And Pinb.3 = 1 And Pinb.4 = 1 Then 'wenn keine Taste gedrückt... Enable Pcint0 'PcInt einschalten 'gute Nacht :-)) !sleep End If
Bascom-Code im vorigen Thread ist aktualisiert.
Damit bin ich nun endgültig zufrieden.
Der Code hat sehr viel Potential. Zub Bsp, wenn Timer1 durch andere Aufgaben in grösseren Prozessoren belegt ist etc.
Bin auf Antworten gespannt.
Ach ja : Warum kam der Code nicht ein JAhr früher ?
Nun hab ich mich mit nem Tiny2313 rumgeschlagen, hatte das Basiswissen von jetzt über den Sleep Befehl noch nicht und liess den Tiny damals über ein Diodenmatrix auf INT0 bei Tastendruck aufwachen, weil er mit dem PCint nicht mehr aufwachen wollte. Heute weiss ich, dass die Deklaration PCMSK wichtig ist, damit er weiss, auf welche Pin´s er reagieren muss.
Aber hat grad richtig Spass gemacht, meine kleine IR Fernbedienung zu bauen. Endlich haben meine kleinen Tiny13 ein ZuHause =D>
VlG
Bernhard
Hallo
Dass man den Code mehrfach senden sollte, hatte ich auch nicht bedacht.
Vielleicht so? (nur theoretisch)
und die eigentliche Tastenabfrage in der Pcint0-ISR:Code:Label: ' vermutlich ist PinB.5 (!reset) high deshalb ist PINB ohne gedrückte Taste wohl 62' If Pinb = 62 Then 'wenn keine Taste gedrückt Enable Pcint0 'PcInt einschalten 'gute Nacht :-)) mic: Ob das auch in einer "Condischen" funktioniert weiß ich nicht' !sleep Else Rc5_code.11 = Not Rc5_code.11 'sonst toggle-Bit wechseln und weitersenden End If 'Bitmaske auf erstes von 14 zu sendende Bits setzen' ' Rc5_bitmaske = &B0010000000000000
Hab's nicht getestet, weil Aufbau eingemottet. Wir haben am Filderrand satte 1cm Neuschnee.Code:Int: 'Wenn Interrupt ausgelöst wird, (irgendeine Taste gedrückt) Disable Pcint0 'schalte INT0 ab If Pinb.1 = 0 Then 'Taste grün Rc5_code = &B0011010010000001 End If If Pinb.2 = 0 Then 'Taste rot Rc5_code = &B0011010010000000 End If If Pinb.4 = 0 Then 'Taste blau Rc5_code = &B0011010010000010 End If Return 'hoch zur Hauptschleife nach Befehl Sleep
Gruß
mic
[Edit]Ich bin einfach zu langsam. Schön dass es nun endgültig funktioniert
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen