stefan, hat sich schon erledigt! Workpad se kanns nicht, aber workpad plus kanns!
Druckbare Version
stefan, hat sich schon erledigt! Workpad se kanns nicht, aber workpad plus kanns!
Hey, Mic
Hab dein Programm gerade getestet, Sendet schon brav RC5 codes, nur kann ich nicht 100% sagen ob sie stimmen! Kann man das Programm irgendwie verändern das nur 1 Signal gesendet wird? Im grossen und ganzen siehts schon gut aus, nur versteh ich gerade mal 10% vom Programm! Eines muss ich eingestehen du hast wirklich was drauf!
Mfg Harry
Hallo Harry
Hihi, danke für's Lob. Prima, dass es nun mit deinen Fuses funktioniert. Dass der Code für dich noch nicht vollkommen durchschaubar ist, wundert mich nicht wirklich. Ich quäle mich auch sehr, aber man wächst ja bekanntlich mit den Aufgaben.
Inzwischen kann ich den RC5-Code richtig senden, allerdings nur einmal, weil meine ISR noch zu lange dauert und sich der Tiny deshalb aufhängt. Trotz aller Optimierungsanstrengungen will sie einfach nicht mehr kleiner werden.
Ein großer Fehler steckt noch in der Zusammenstellung der zu sendenden Bits, deshalb wird zum Testen jetzt der Wert für rc5_code direkt als Bitmuster gesetzt. In der jetztigen Version des Progamms kurz bevor die ISR die Kontrolle übernimmt:
Rc5_code = &B0011000101000111
steht z.B. für 2 Start, kein Toggle, Addresse 5 und Command 7
Übrigens kann ich mit dem Code sogar mit der normalen roten LED auf kurze Entfernung (10 cm) Daten zu meinem RP6 senden.
Durch die Optimierungen belegt das Programm nun nur noch 58% des Speichers:
Und noch der Output meines RP6 (mit jeweils einem tiny-Neustart zwischen den Zeilen):Code:'RC5-Code senden mit ATtiny13 100% Funktion! (aber nur einmal*grummel*)16.12.07 mic'
'Die IR-LED wird mit Widerstand(!) zwischen Pin5(PB0, OC0A) und GND angeschlossen '
'Trägerfrequenz = 36kHz(Puls/Pause 1:1), Bitlänge = Trägerfrequenz/64'
'Code basierden auf den Angaben von: http://www.sbprojects.com/knowledge/ir/rc5.htm'
'Einstellungen -----------------------------------------------------------------'
'Wir verwenden einen tiny13'
$regfile = "ATtiny13.dat"
'der mit internen 9,6MHZ getaktet wird (Fuse Takt/8 nicht gesetzt!)'
$crystal = 9600000
'Weitere, von mir noch nicht geprüfte Compileranweisungen:'
$hwstack = 32
$swstack = 8
'Hier musste ich von 16 auf 8 ändern,ich habe keine Ahnung, was das bewirkt'
'Mit 16 erhalte ich eine Fehlermeldung:'
'Out of SRAM-Space bei Dim Rc5_bit_gesetzt As Word'
$framesize = 8
'Dims und Declears -------------------------------------------------------------'
'Der zu sendende RC5-Code als 16bit-Wert'
Dim Rc5_code As Word
'Bitmaske für das zu sendende Bit aus RC-Code'
Dim Rc5_bitmaske As Word
'Teiler des Trägertaktes und Kennung des Halbbits'
'128-65 bedeutet erstes Manchester-Halbbit, 64-1 bedeutet zweites Manchester-Halbbit'
'0 bedeutet komplettes Bit gesendet!'
Dim Rc5_halbbit As Byte
'die zu sendende RC5-Adresse (5 Bits, 0-31)'
Dim Rc5_adresse As Byte
'das zu sendende RC5-Kommando (6 Bits, 0-63)'
Dim Rc5_kommando As Byte
'größer 0 bedeutet aktuelles zu sendende Bit ist gesetzt'
Dim Rc5_bit_gesetzt As Word
'Zähler für das Demo'
Dim Count As Byte
'Startblinken'
Config Portb.0 = Output
Portb.0 = 1
Wait 1
Portb.0 = 0
Wait 1
'Die Sendesubroutine deklarieren'
Declare Sub Rc5_send(byval Address As Byte , Byval Command As Byte , Byval Tog As Byte)
'Initialisierung ---------------------------------------------------------------'
'Timer0 auf CTC-Mode mit OC0A-Toggeln und OCR0A löschen nach Match bei perscale=1'
Config Timer0 = Timer , Compare A = Toggle , Prescale = 1 , Clear Timer = 1
'MatchCompareRegister setzen: 133 für 36kHz oder 126 für 38kHz'
Ocr0a = 133
'ISR für Timer0 bei Compare0A-Match definieren'
On Oc0a Rc5_isr Nosave
'MatchCompare Interrupt erlauben'
Enable Oc0a
'Interrupts generell erlauben'
Enable Interrupts
'Es wird noch wird nicht gesendet'
Rc5_bitmaske = 0
'Hauptprogramm -----------------------------------------------------------------'
Do
Call Rc5_send(count , Count , 0)
Waitms 200
Loop
'Sub und ISR -------------------------------------------------------------------'
'die eigentliche Sendefunktion'
Sub Rc5_send(address As Byte , Command As Byte , Tog As Bit)
'14 bits RC5-Code zusammensetzen in der 16 Bit Variablen Rc5_code'
'Bitnummer: 1111110000000000'
' 5432109876543210'
'Funktion: --sstaaaaacccccc'
'2 Startbits setzen'
Rc5_code = &B11
'Bitmuster nach links weiterschieben und Platz für die nächsten Bits schaffen'
Shift Rc5_code , Left , 1
'das Toggle-Bit setzen wenn gewünscht'
If Tog <> 0 Then
Set Rc5_code.0
End If
'address hat 5 gültige Bits'
Shift Rc5_code , Left , 5
'überflüssige Addressbits ausblenden'
Address = Address And &B11111
'und Address-Bits in Rc5_code setzen'
Rc5_code = Rc5_code Or Address
'command hat 6 gültige Bits'
Shift Rc5_code , Left , 6
'überflüssige Commandbits ausblenden'
Command = Command And &B111111
'und Kommando-Bits in Rc5_code setzen'
Rc5_code = Rc5_code Or Command
'Bitmaske auf bit13 (erstes von 14 RC5-Bits) setzen
'Bitnummer: 1111110000000000'
' 5432109876543210'
'Funktion: --sstaaaaacccccc'
'Maske: 0010000000000000'
Rc5_bitmaske = &B0010000000000000
Rc5_code = &B0011000101000111 '
'Start der Übertragung mit dem ersten Halbbit, Trägertakt /128 = Bitlänge!'
'Rc5_halbbit = 128'
Rc5_halbbit = Bits(7)
'Ab hier übernimmt die ISR die Kontrolle. Wir warten, bis alle Bits gesendet sind'
Do
nop
Loop Until Rc5_bitmaske = 0
'LED ausschalten'
Config Portb.0 = Input
'Fertig'
End Sub
'Ab hier folgt die ISR'
Rc5_isr:
'Code aus der Basom-Hilfe on interrupt isr nosave'
$asm
PUSH R24 ; since we are going to use R24 we better save it
IN r24, SREG ; get content of SREG into R24
PUSH R24 ; we can save a register
$end Asm
'Wenn wir senden wollen'
If Rc5_bitmaske > 0 Then
'ermitteln wir den Status des aktuellen Bits'
Rc5_bit_gesetzt = Rc5_code And Rc5_bitmaske
'und wenn wir beim Start des ersten Halbbits sind,'
If Rc5_halbbit = 128 Then
'dann geben wir das erste Halbbit invertiert aus. (Manchestercodierung)
If Rc5_bit_gesetzt = 0 Then
Config Portb.0 = Output
Else
Config Portb.0 = Input
End If
'ende erstes Halbbit'
End If
'Beim zweiten Halbbit müssen wir nun den gewünschten Bitstatus ausgeben'
If Rc5_halbbit = 64 Then
If Rc5_bit_gesetzt = 0 Then
Config Portb.0 = Input
Else
Config Portb.0 = Output
End If
'ende zweites Halbbit'
End If
'Bitzeit ist Trägertakt/128 , also wir zählen den Bittimer runter'
Decr Rc5_halbbit
'Bei RC5_halbbit = 0 ist das aktuelle Bit gesendet, wir senden nun das nächste Bit'
If Rc5_halbbit = 0 Then
'und laden den Bittimer mit dem Startwert für erstes Halbbit.'
'Rc5_halbbit = 128'
Rc5_halbbit = Bits(7)
'Dann setzen wir die Bitmaske auf das nächste zu sendende Bit'
Shift Rc5_bitmaske , Right , 1
'Rc5_bitmaske = 0 beim nächsten Aufruf der ISR bedeutet,'
'alle Bits sind gesendet, also sind wir fertig'
'nächstes Bit'
End If
'und wiederholen 14 mal'
'Ende wenn rc5_bitmaske >0'
End If
$asm 'Code aus der Basom-Hilfe on interrupt isr nosave'
POP R24 ;get content of SREG
Out Sreg , R24 ; Save Into Sreg
POP R24 ; get r24 back
$end Asm
Return
So langsam sollte man sich mal Gedanken über die Auswertung der Daten für die geplante Zeitnahme am PC machen...Zitat:
_________
Please make sure that your IR Remote Control really transmits RC5 code!
Toggle Bit:0 | Device Address:5 | Key Code:7
Toggle Bit:0 | Device Address:5 | Key Code:7
Toggle Bit:0 | Device Address:5 | Key Code:7
Ach, noch eine Bemerkung zum RC5-Protokoll: Je nach Informationsquelle wird ein gesetztes Bit durch einen LowzuHigh oder einen HighzuLow-Übergang beschrieben. Ich folge jetzt der verbreitesten Auffassung und sende LowzuHigh für ein High und HighzuLow für ein Low. Im RN-Wissen ist es genau gegenteilig beschrieben. Die Verwirrung wird wohl durch den negierten Ausgang des PSoP verursacht. Mein RP6 versteht meine selbst erzeugten Daten und die Daten meiner TV-Fernbedienung. Deshalb nehme ich an, meine Version ist die Richtige.
Gruß
mic
Guten Morgen, Mic
zu deiner Aussage:
So langsam sollte man sich mal Gedanken über die Auswertung der Daten für die geplante Zeitnahme am PC machen...
Die Auswertung funktioniert bereits,
Der Empfänger:
http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm
Die Software:
http://www.ocinside.de/go_d.html?htt...llation_d.html
Der Rundenzähler:
http://www.rctiming.com/download.shtml
(LapsFree)
Mit der Fernbedienung des Sat-Receivers funktionierts tadellos (mit Seriellen Empfänger), für USB hab ichs noch nicht gebaut! Sollte aber kein Problem sein wenn das Programm mit Attiny2313 zu 100% kompatibel ist!
Is zwar keine Elegante Lösung, aber es funktioniert!
Es soll ja auch nicht aufs tausendstel genau sein!
Kann es auch nicht, da ich ja ein gewisses "IR - Fenster" zum übertragen brauche und da ist die übertragung mal schneller und mal langsamer.
Mfg
Harry
Hallo Harry
Das trifft sich gut, denn das Programm für den tiny13 ist auch fertig:Zitat:
Die Auswertung funktioniert bereits
Die Ausgabe meines RP6 (die Daten wurden mit einer normalen roten 5mm-LED aus ca. 30cm Entfernung gesendet!):Code:'RC5-Code senden mit ATtiny13 100% Funktion mit endloser Wiederholung 18.12.07 mic'
'Die IR-LED wird mit Widerstand(!) zwischen Pin5(PB0, OC0A) und GND angeschlossen '
'Trägerfrequenz = 36kHz(Puls/Pause 1:1), Bitlänge = Trägerfrequenz/64'
'Code basierden auf den Angaben von: http://www.sbprojects.com/knowledge/ir/rc5.htm'
'Die Stellen, an denen man den zu sendenden Code und die Wiederholgeschwindigkeit'
'ändern kann, sind mit +++++++++++++++++++++++++++++++++++++++++++++++++ markiert'
'
'Einstellungen -----------------------------------------------------------------'
'Wir verwenden einen tiny13'
$regfile = "ATtiny13.dat"
'der mit internen 9,6MHZ getaktet wird (Fuse Takt/8 nicht gesetzt!)'
$crystal = 9600000
'Weitere, von mir noch nicht geprüfte Compileranweisungen:'
$hwstack = 32
$swstack = 8
$framesize = 16
'Dims --------------------------------------------------------------------------'
'Der zu sendende RC5-Code als 16bit-Wert'
Dim Rc5_code As Word
'Bitmaske für das zu sendende Bit aus RC-Code'
Dim Rc5_bitmaske As Word
'Teiler des Trägertaktes und Kennung des Halbbits'
'0-63 bedeutet erstes Manchester-Halbbit, 64-127 bedeutet zweites Manchester-Halbbit'
Dim Rc5_halbbit As Byte
'größer 0 bedeutet aktuelles zu sendende Bit ist gesetzt'
Dim Rc5_bit_gesetzt As Word
'Sendeflag'
Dim Senden_aktiv As Byte
'Anfang Startblinken'
Config Portb.0 = Output
Portb.0 = 1
Waitms 500
Config Portb.0 = Input
Portb.0 = 0
Wait 1
'Ende Startblinken'
'Initialisierung ---------------------------------------------------------------'
'Startwerte setzen, es findet noch keine Übertragung statt'
Senden_aktiv = 0
'Timer0 auf CTC-Mode mit OC0APin-Toggeln und OCR0A löschen nach Match bei perscale=1'
Config Timer0 = Timer , Compare A = Toggle , Prescale = 1 , Clear Timer = 1
'MatchCompareRegister setzen: 133 für 36kHz oder 126 für 38kHz'
Ocr0a = 133
'ISR für Timer0 bei Compare0A-Match definieren'
On Oc0a Rc5_isr Nosave
'MatchCompare Interrupt erlauben'
Enable Oc0a
'Interrupts generell erlauben'
Enable Interrupts
'Hauptprogramm -----------------------------------------------------------------'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
'14 bits RC5-Code zusammensetzen in der 16 Bit Variablen Rc5_code'
'und Bitmaske auf bit13 (erstes von 14 RC5-Bits) setzen
'Bitnummer: 1111110000000000'
' 5432109876543210'
'Funktion: --sstaaaaacccccc'
'Maske: 0010000000000000'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
'Hier kann man den gewünschten Code eintragen'
Rc5_code = &B0011000101000111
'Testcode: 2 Start, kein Toggle, Adresse 5, Kommando 7'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
Label:
'Bitmaske auf erstes von 14 zu sendende Bits setzen' '
Rc5_bitmaske = &B0010000000000000
'Start ist erstes Halbbit'
Rc5_halbbit = 0
'Ab hier übernimmt die ISR die Kontrolle. Wir warten, bis alle Bits gesendet sind'
Senden_aktiv = 1
Do
nop
Loop Until Senden_aktiv = 0
'+++++++++++++++++++++++++++++++++++++++++'
'Kurz warten vor der nächsten Übertragung'
Config Portb.0 = Output
Portb.0 = 1
Waitms 50
Config Portb.0 = Input
Portb.0 = 0
Waitms 100
'Das ist dann die Wiederholgeschwindikeit'
'+++++++++++++++++++++++++++++++++++++++++'
'Wert für rc5_code erhöhen, Nach Kommando-Überlauf wird Addresse erhöht!'
Incr Rc5_code
'endlos wiederholen'
Goto Label
'Ab hier folgt die ISR ---------------------------------------------------------'
Rc5_isr:
'Code aus der Basom-Hilfe on interrupt isr nosave'
$asm
PUSH R24 ; since we are going to use R24 we better save it
IN r24, SREG ; get content of SREG into R24
PUSH R24 ; we can save a register
$end Asm
'Wenn wir senden wollen'
If Senden_aktiv = 1 Then
'ermitteln wir den Status des aktuellen Bits'
Rc5_bit_gesetzt = Rc5_code And Rc5_bitmaske
'und wenn wir beim Start des ersten Halbbits sind,'
If Rc5_halbbit = 0 Then
'dann geben wir das erste Halbbit invertiert aus. (Manchestercodierung)
If Rc5_bit_gesetzt = 0 Then
Config Portb.0 = Output
Else
Config Portb.0 = Input
End If
'Ende erstes Halbbit'
End If
'Beim zweiten Halbbit müssen wir nun den gewünschten Bitstatus ausgeben'
If Rc5_halbbit = 64 Then
If Rc5_bit_gesetzt = 0 Then
Config Portb.0 = Input
Else
Config Portb.0 = Output
End If
'Ende zweites Halbbit'
End If
'Bitzeit ist Trägertakt/128 , also wir zählen den Bittimer hoch'
Incr Rc5_halbbit
'Bei RC5_halbbit = 128 ist das aktuelle Bit gesendet, wir senden nun das nächste Bit'
If Rc5_halbbit = 128 Then
'Wir setzen die Bitmaske auf das nächste zu sendende Bit'
Shift Rc5_bitmaske , Right , 1
'und laden den Bittimer mit dem Startwert als Flag für erstes Halbbit.'
Rc5_halbbit = 0
'Ist das letzte Bit gesendet?'
If Rc5_bitmaske = 0 Then
'Dann sind wir fertig. Dies erkennt dann das Hauptprogramm'
Senden_aktiv = 0
'Ende Sendeflag'
End If
'weitersenden bis alle Bits ausgegeben sind'
End If
'und wiederholen bis rc5_bitmaske = 0'
End If
'Code aus der Basom-Hilfe on interrupt isr nosave'
$asm
POP R24 ;get content of SREG
Out Sreg , R24 ; Save Into Sreg
POP R24 ; get r24 back
$end Asm
Return
Nach vielen Versuchen und mit deutlich schlankerem Code (ohne Schnickschnack nur noch das Wesentliche) sendet der tiny13 nun schneller als meine TV-Fernbedienung im Repead-Mode. Warum das so nun funktioniert kann ich noch nicht wirklich schlüssig erklären. Hauptproblem ist der so nicht funktionierende Handshake zwischen Warteschleife und ISR. Und da sind noch ein paar andere Dinge, die nicht so funktionieren, wie ich das gerne hätte.Code:Please make sure that your IR Remote Control really transmits RC5 code!
Toggle Bit:0 | Device Address:5 | Key Code:7
Toggle Bit:0 | Device Address:5 | Key Code:8
Toggle Bit:0 | Device Address:5 | Key Code:9
Toggle Bit:0 | Device Address:5 | Key Code:10
Toggle Bit:0 | Device Address:5 | Key Code:11
Toggle Bit:0 | Device Address:5 | Key Code:12
Toggle Bit:0 | Device Address:5 | Key Code:13
Toggle Bit:0 | Device Address:5 | Key Code:14
Toggle Bit:0 | Device Address:5 | Key Code:15
Toggle Bit:0 | Device Address:5 | Key Code:16
Toggle Bit:0 | Device Address:5 | Key Code:17
Toggle Bit:0 | Device Address:5 | Key Code:18
Toggle Bit:0 | Device Address:5 | Key Code:19
Toggle Bit:0 | Device Address:5 | Key Code:20
Toggle Bit:0 | Device Address:5 | Key Code:21
Toggle Bit:0 | Device Address:5 | Key Code:22
Toggle Bit:0 | Device Address:5 | Key Code:23
Toggle Bit:0 | Device Address:5 | Key Code:24
Toggle Bit:0 | Device Address:5 | Key Code:25
Toggle Bit:0 | Device Address:5 | Key Code:26
Toggle Bit:0 | Device Address:5 | Key Code:27
Toggle Bit:0 | Device Address:5 | Key Code:28
Toggle Bit:0 | Device Address:5 | Key Code:29
Toggle Bit:0 | Device Address:5 | Key Code:30
Toggle Bit:0 | Device Address:5 | Key Code:31
Toggle Bit:0 | Device Address:5 | Key Code:32
Toggle Bit:0 | Device Address:5 | Key Code:33
Toggle Bit:0 | Device Address:5 | Key Code:34
Toggle Bit:0 | Device Address:5 | Key Code:35
Toggle Bit:0 | Device Address:5 | Key Code:36
Toggle Bit:0 | Device Address:5 | Key Code:37
Toggle Bit:0 | Device Address:5 | Key Code:38
Toggle Bit:0 | Device Address:5 | Key Code:39
Toggle Bit:0 | Device Address:5 | Key Code:40
Toggle Bit:0 | Device Address:5 | Key Code:41
Toggle Bit:0 | Device Address:5 | Key Code:42
Toggle Bit:0 | Device Address:5 | Key Code:43
Toggle Bit:0 | Device Address:5 | Key Code:44
Toggle Bit:0 | Device Address:5 | Key Code:45
Toggle Bit:0 | Device Address:5 | Key Code:46
Toggle Bit:0 | Device Address:5 | Key Code:47
Toggle Bit:0 | Device Address:5 | Key Code:48
Toggle Bit:0 | Device Address:5 | Key Code:49
Toggle Bit:0 | Device Address:5 | Key Code:50
Toggle Bit:0 | Device Address:5 | Key Code:51
Toggle Bit:0 | Device Address:5 | Key Code:52
Toggle Bit:0 | Device Address:5 | Key Code:53
Toggle Bit:0 | Device Address:5 | Key Code:54
Toggle Bit:0 | Device Address:5 | Key Code:55
Toggle Bit:0 | Device Address:5 | Key Code:56
Toggle Bit:0 | Device Address:5 | Key Code:57
Toggle Bit:0 | Device Address:5 | Key Code:58
Toggle Bit:0 | Device Address:5 | Key Code:59
Toggle Bit:0 | Device Address:5 | Key Code:60
Toggle Bit:0 | Device Address:5 | Key Code:61
Toggle Bit:0 | Device Address:5 | Key Code:62
Toggle Bit:0 | Device Address:5 | Key Code:63
Toggle Bit:0 | Device Address:6 | Key Code:0
Toggle Bit:0 | Device Address:6 | Key Code:1
Toggle Bit:0 | Device Address:6 | Key Code:2
Toggle Bit:0 | Device Address:6 | Key Code:3
Toggle Bit:0 | Device Address:6 | Key Code:4
Toggle Bit:0 | Device Address:6 | Key Code:5
Toggle Bit:0 | Device Address:6 | Key Code:6
Toggle Bit:0 | Device Address:6 | Key Code:7
Toggle Bit:0 | Device Address:6 | Key Code:8
Toggle Bit:0 | Device Address:6 | Key Code:9
Toggle Bit:0 | Device Address:6 | Key Code:10
Toggle Bit:0 | Device Address:6 | Key Code:11
Toggle Bit:0 | Device Address:6 | Key Code:12
Toggle Bit:0 | Device Address:6 | Key Code:13
Toggle Bit:0 | Device Address:6 | Key Code:14
Toggle Bit:0 | Device Address:6 | Key Code:15
Toggle Bit:0 | Device Address:6 | Key Code:16
Toggle Bit:0 | Device Address:6 | Key Code:17
Toggle Bit:0 | Device Address:6 | Key Code:18
Toggle Bit:0 | Device Address:6 | Key Code:19
Toggle Bit:0 | Device Address:6 | Key Code:20
Toggle Bit:0 | Device Address:6 | Key Code:21
Toggle Bit:0 | Device Address:6 | Key Code:22
Toggle Bit:0 | Device Address:6 | Key Code:23
Toggle Bit:0 | Device Address:6 | Key Code:24
Toggle Bit:0 | Device Address:6 | Key Code:25
Toggle Bit:0 | Device Address:6 | Key Code:26
Der zu sendende RC5-Code wird nun direkt im Quellcode eingetragen (Doku im Listing), die Wiederholgeschwindigkeit ist schon ziemlich am Limit, eventuell sind noch ein paar ms drin, aber es sollte so schon reichen. Das Programm belegt 41% des Speichers, man könnte also noch eine externe Codierung für den jeweiligen Renner einbauen. Oder man flasht die tinys einzeln und markiert sie.
Im Programm ist zur Demo und zum Testen der Ausgabe ein automatisches Hochzählen der Kommando-Werte (mit Überlauf in die Address-Werte) eingebaut. Der Befehl dafür (incr rc5_code) befindet sich am Ende der Hauptschleife direkt vor dem GOTO-Befehl (wenn schon Basic, dann aber mit Genuss! *grins*) Für den endgültigen Einsatz muss man den Befehl natürlich entfernen/auskommentieren.
Ich hoffe, die Funktion genügt den Erfordernissen.
Gruß
mic
Hi, Mic!
Danke für deine Bemühungen, werde das Programm gleich Heute testen!
Bin schon total gespannt!
Werde Berichten, ob mit Erfolg oder ohne!
Mfg Harry
Hi, Mic!
Ich bin sprachlos! Es funktioniert!
Alleine die Reichweite ist genial.... bisschen zuviel, aber das lässt sich ja ändern!
Bei der Geschwindigkeit bin ich auf 50ms gegangen, meines Erachtens sendet er tadellos ohne irgend welche hänger!
Nur die Software ist zu langsam! ;-)
Spitzen Programm! Du hast mir sehr geholfen, danke nochmal!
Werde nun mal ein Paar Prototypen bauen und sie an den Fahrzeugen testen, wie es aussieht mit Überschneidungen der IR-Sender.
("Arbeit" für die Weihnachtsfeiertage)
Der Tiny13 kann mehr als man glaubt ---> zumindest was ich gedacht habe! ;-)
Muss mich unbedingt mehr mit dieser Materie beschäftigen, den alleine schon Dein Laufroboter mit den Drei Servos und den Scheiben an den Füssen..... ist genial.
Werde mal versuchen analogservos über attiny anzusprechen, wird hoffentlich nich so komplex sein wie der RC5Sender auf einen Chip der es nicht kann.....
Werde weiterhin meine Fortschritte zu RC5 Sender posten wenns jemanden interessiert, ich hab vor das ganze zusätzlich in SMD Bauweise zu verwirklichen!
Dazu eine Frage: Kann der SMD ATtiny13 auch 50mA am Ausgang? Wenn nicht welcher Transistor ist für 38kHz geeignet?
Auf jeden Fall werd ich jetzt alles Fernsteuern was es nur gibt..... ;-)
---> nächstes Projekt Bionic-Female-Interface ;-)
Mfg und besten Dank
Harry
50mA kann der Tiny denke ich schon, aber das ist eher "auf eigene Gefahr"... Zur Sicherheit lieber nen BCxx dazwischen und gut ists... 38kHz sind ja nicht wirklich viel...
Eigene Gefahr Gut! ;-)
Mal sehen wie weit die IR-LED mit rund 40mA sendet!
(Platz sparen)
Mfg Harry
Hallo Harry
Das freut mich sehr. Man könnte noch ein paar Optimierung durchführen, aber wenn es so funzt, ist es ja gut.Zitat:
Ich bin sprachlos! Es funktioniert!
Vielleicht haben wir jetzt eine eierlegende Wollmilchsau erfunden. Den zur 36kHz-Erzeugung häufig verwendeten NE555 sticht der tiny13 trotz der geringen Mehrkosten locker aus. Er benötigt keine externen Bauteile und kann selbstständig Daten auf das Signal modulieren. Der Empfang der Daten ist sehr einfach, denn man muss nur die TOsP-Datenbits einlesen, die 36kHz verarbeitet der TOsP selbstständig. Den passenden Empfangs-tiny13 werde ich natürlich auch noch programmieren.
Mit den noch freien vier Eingangspins kann man vier Schalter abfragen und die jeweiligen Stati senden. So läßt sich eine 4bit parallele IR-Schnittstelle realisieren mit der man per IR alles möglich steuern kann.
Wenn man die empfangenen Daten nicht als RC5 interpretiert sondern als einen reinen Bitwert, dann kann man mit dem Programm alles mögliche senden. Als 16, 8, 4-bit oder beliebigen anderen Bitlängen, einfach die Bitmaske anpassen und fertig. Mit weniger Bits wird die Geschwindigkeit noch schneller und die Schaltung stromsparender. So kann der tiny13 Daten an alle senden, die einen TOsP verstehen. Die RC5-Empfangsroutinen für die AVRs lesen meist alle Bits ein und interpretieren die Daten dann als RC5.
Mit den ADCs des tiny13 kann man analoge Geber oder Potis einlesen und die Werte (z.B. 10bit Daten) mit IDs senden. Für Wetterdaten oder als proportionale IR-Fernbedienungen (bis zu 4 Kanäle in einem alten Joystick...).
Wenn man die Bitlängen (jetzt 64/128) ändert, kann man wohl auch eine für RS232 gebräuchliche Baudrate erzeugen und die Daten (mit Start, Stop und Parity) direkt auf ein Terminal oder zu einer Auswertesoftware senden.
Viele Möglichkeiten für so einen unscheinbaren 8-Pinner, oder?
Gruß
mic