Hi, ich habe ein Problem. Und zwar habe ich mir eine Platine geätzt, wo jetzt ein Attiny2313 in SMD drauf sitzt. An PD3-5 hängen jetzt 3 Taster, bei deren Betätigung jeweils ein RC5 Code gesendet werden soll. Die Diode hängt an PB3/OC1A und ist testweise noch eine normale LED. Der Code ist noch sehr einfach gehalten: $regfile = "attiny2313.dat" $crystal = 4000000 Ddrd.5 = 0 Portd.5 = 1 Dim Togbit1 As Byte Dim Togbit2 As Byte Dim Command As Byte Dim Address As Byte Command = 12 Togbit1 = 0 Togbit2 = 32 Address = 5 Do If Pind.5 = 0 Then Rc5send Togbit1 , Address , Command Rc5send Togbit2 , Address , Command Waitms 100 Portb.3 = 0 End If Loop End (Code ist aus dem Internet kopiert und angepasst: http://www.qsl.net/d/dg1xpz/elektronik/avr/rc5_send.html ) Wenn PD.5 betätigt wird soll der Code gesendet werden. Passiert auch. ABER, nach dem Senden bleibt die LED dauerhaft aktiv. Auch das "PORTB.3 = 0" vor dem "end if" bringt nix. Die LED bleibt an. Nur verstehe ich nicht wieso. Spätestens das Setzen von PB.3 auf 0 sollte die LED abschalten. Weitere Details: Versorungsspannung: CR2032 - 3V Takt: interne 4 Mhz interne Pullups PD3-5: aktiv LED hängt direkt an PB.3. Das ganze soll ein Geschenk werden. Mittels dieser Fernbedienung soll eine hoch montierte Solar-LED-Lampe geschaltet werden. PD.3 bekommt das Signal "LEDs an/aus" PD.4 und PD.5 bekommen das Signal "LEDs heller, LEDs dunkler". Ich danke Euch im Vorraus.
Hallo Engi, laut dem Beispiel auf http://www.qsl.net/d/dg1xpz/elektronik/avr/rc5_send.html könnte die Belegung von PortB Ddrb.3 = 1 'Pin PB0 ist Ausgang Portb.3 = 0 'PB0 definiert aus evtl. helfen. MfG von der Spree
Also ich bin derzeit voll am suchen. Der Pin lässt sich einfach nicht abschalten. Kann es sein das noch eine Zweitfunktion des Pins PB3 aktiviert ist? Im Beispiel von Bascom hängt die IR-Diode über Transistor und Vorwiderstand am Pin. Nur habe ich das jetzt erst gesehen wo die Platine bereits fertig geätzt und bestückt ist. Wie gesagt, die Diode hängt jetzt direkt am Pin. Beim Betätigen des Tasters flackert die LED. Die Daten gehen also definitiv raus und ein paralel zur Diode geschaltetes Multimeter zeigt beim Senden Werte zwischen 2,4V und 2,6V. Nach dem Senden bleibt eine Spannung von 2,4V. Hat jemand eine Idee woran es liegen könnte das sich PB3 nicht auf 0 setzen lässt? Danke.
Der RC5 Send Code benuzt offenbar einen Timer um den 38kHz Träger zu erzeugen. Ich schätze mal, dass der Code insofern fehlerhaft ist, dass die Verbindung vom Timer zum Pin nicht mehr gelöst wird. Da kannst du selber dann am Port Register zuweisen, was du willst. Solange diese Verbindung nicht gelöst wird, hast du keine Kontrolle über den Pin. Timer Register studieren und die COM Bits löschen.
Es könnte daran liegen, dass im Beispiel ein AT90S2313 verwendet wurde, dessen Ports im Gegensatz zum ATTINY nur als Stromsenke arbeiten können.
Leider hat das Setzen des PINs PB3 als Ausgang keine Auswirkung. Und was die Schaltung angeht, die ist leider bereits fest. Wegen fertiger Platine. Da lässt sich jetzt nix mehr dran ändern. Da die Empfängerschaltung noch nicht aufgebaut ist, besteht aber die Freiheit mir ein eigenes Übertragungsprotokoll auszudenken. Da ich noch recht frisch bei Bascom bin und erst erste Versuche mit Displays und der Bascom eigenen DCF77 Routine experimentiert habe, wird es vielleicht nicht ganz einfach, aber ein lohnenswertes Projekt. Ich dachte in Richtung Manchester Codierung. Da ich hier ein paar alte Wetterstationssensoren der Ws2500 Serie (Hersteller ELV) zu stehen habe, die ich gern anzapfen würde, wäre es recht lohnenswert mich damit zu beschäftigen.
Du hast aber gelesen, das sich die Ausgänge des Controllers in deinem Link (originalschaltung) anders verhalten, als die des von dir eingesetzten?
Jast du die Transistorschsltung aus dem Beispiel verwendet oder die LED zwischen PB3 und GND angeschlossen?
So gestern Abend und heute noch viel rum probiert und nun habe ich eine Lösung die sowohl sehr einfach gehalten ist, aber trotzdem funktioniert. Sobald ich den Attiny2313 ohne RC5, sondern mit einem einfachen Blinker bespielt habe, lief auch PB3 wieder hervorragend. Das Programm sorgte einfach nur dafür das PB3 im Sekundentakt blinkt, was er auch tat. Hat demnach wohl wirklich irgendwie mit den Timern zu tun das PB3 nach dem senden nicht mehr aus gehen wollte. Meine jetzige Lösung ist wie gesagt, sehr einfach gehalten. Es werden 2 Bytes übertragen. Das erste ist mit einer festen Zahl belegt, welche zur Überprüfung dient ob das empfangene Signal auch von der Fernbedienung kam, das zweit Byte sind die Nutzdaten. Übertragen wird so: If Pind.5 = 0 Then 'Wenn Taster gedrückt wird Send = 155 'Dann wird der feste Wert von 155 geladen Senden 'und gesendet Portb.3 = 0 'Pin PB3 auf 0 setzen Wait 1 'und erstmal eine Sekunde Ruhe Send = 5 'Danach senden der Nutzdaten. 'Dieser Taster sendet eine 5 Senden 'Wieder die Subroutine "senden" End If 'Tasterabfrage beenden Sub Senden() 'Unterroutine "Senden" For Zahler = 1 To 7 'Diese Routine gibt jedes der 8 Bits Portb.3 = Send.zahler 'nacheinander an PB3 aus Waitms 100 'Der Empfänger muss lediglich genau die Next 'Zeiten einhalten End Sub Sofern Sender, als auch Empfänger sich an die Zeiten halten, also Beispielsweise die 100 Millisekunden Wartezeit bis das nächste Bit geschaltet wird, sollte der Empfänger das empfangen was der Sender sendet. Hier mal die Empfangsroutine: Sub empfangen() 'Unterroutine "Senden" For Zahler = 1 To 7 'Hier klappert der Attiny jedes send.zahler = Portb.3 'einzelne Bit der Variable "send" ab Waitms 100 'und setzt es auf den Wert, welcher Next 'an PB3 gerade anliegt. End Sub Entsprechend müsste natürlich PB3 beim Empfänger als Eingang definiert sein. Läuft alles korrekt, sollte der Empfänger genau das ausgeben was der Sender gesendet hat.
Otto schrieb: > Jast du die Transistorschsltung aus dem Beispiel verwendet oder die LED > zwischen PB3 und GND angeschlossen? Ich hatte die Diode direkt an PB3. Laut der Schaltung hätte ich einen kleinen Transistorverstärker zwischen schalten müssen. Wie gesagt, ist die Platine, auf welcher die Schaltung sich befindet allerdings bereit fertig und kann nicht mehr geändert werden.
1. Direkt an PB3 schriebst du bereits oben - aber gegen VCC oder GND? 2. Das hat damit zu tun, dass der Ruhepegel der RC5-Routine invers ist. 3. So wie in deinem letzten Post beschrieben, wirst du nie Daten empfangen, denn wie soll sich der Empfänger darauf synchronisieren?
Otto schrieb: > 1. Direkt an PB3 schriebst du bereits oben - aber gegen VCC oder GND? > > 2. Das hat damit zu tun, dass der Ruhepegel der RC5-Routine invers ist. Das hat mir richtig geholfen. Daraufhin habe ich mir die Schaltung auf der verlinkten Seite nochmal genau angeschaut und siehe da... Verstärkt wird mit PNP Transistor, welcher naturgemäß nur bei annähernd 0V durchsteuert und höhreren positiven Spannungen sperrt. Dachte bisher immer das RC5 auch mit positiven Signalen arbeitet. Egal, ich hab jetzt per Freiluftverdrahtung auf der geätzten Platine noch einen PNP Transistor mit 1k Vorwiderstand untergebracht und an dessen Emitter hängt auch gleich der zweite NPN Transistor, welcher das Signal nochmal deutlich verstärkt. Die Kamera meines Handys zeigt nun ein kräftiges Flackern der Infrarot LED und der aufgebaute Empfänger dekodiert die Signale auch korrekt. Soweit, so gut. Nur ein Problem habe ich trotzdem noch. RC5 ist ja 36khz. Leider hab ich bei Reichelt aber einen 38khz Empfänger bestellt. Vermute mal das daraus auch der schwache Empfang resultiert. Denn Richtig empfangen wird die Fernbedienung nur selten und nur mit viel rum probieren. Aber wie gesagt, wenn empfangen wird, dann auch richtig dekodiert. Hier für alle Nachbauer nochmal 2 sehr gute Links. Die Beschreibung zum Aufbau des Empfängers und seines Programms in Bascom: http://www.qsl.net/d/dg1xpz/elektronik/avr/rc5_empf.html Und hier das gleiche für den Sender: http://www.qsl.net/d/dg1xpz/elektronik/avr/rc5_send.html
Es freut mich, dass du die Denkanstöße umgesetzt und dich auch mit der Theorie beschäftigt hast. Das ein Prototyp einer Platine nicht auf Anhieb funktioniert ist wohl schon jedem passiert. Daraus lernt man und versucht es beim nächsten mal besser zu machen..... Gruß Otto
Jetzt läuft alles super. Nachdem ich gestern in den Code nach dem Senden noch 10 Millisekunden Pause eingefügt habe, wird das Signal vom Empfänger jetzt überall empfangen. Da der Taster nicht Hardwareseitig entprellt war, gingen vielleicht gleich 2 oder 3 Telegramme ohne große zeitmäßige Trennung, auf Sendung. Durch die 10 Millisekunden kann der Empfänger nun die einzelnen Telegramme sauber voneinander trennen und ist entsprechend sensibel geworden. Man kann die Fernbedienung nun auch nach hinten oder an die Decke richten, sicher empfangen wird trotzdem. Ob der Empfänger nun also mit 36khz oder 38khz arbeitet, scheint demnach egal zu sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.