- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 8 von 10 ErsteErste ... 678910 LetzteLetzte
Ergebnis 71 bis 80 von 95

Thema: RC5 Senden mit Attiny13

  1. #71
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Anzeige

    Praxistest und DIY Projekte
    stefan, hat sich schon erledigt! Workpad se kanns nicht, aber workpad plus kanns!

  2. #72
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    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

  3. #73
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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:
    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
    Und noch der Output meines RP6 (mit jeweils einem tiny-Neustart zwischen den Zeilen):
    _________
    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
    So langsam sollte man sich mal Gedanken über die Auswertung der Daten für die geplante Zeitnahme am PC machen...

    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #74
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    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

  5. #75
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Harry

    Die Auswertung funktioniert bereits
    Das trifft sich gut, denn das Programm für den tiny13 ist auch fertig:
    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
    Die Ausgabe meines RP6 (die Daten wurden mit einer normalen roten 5mm-LED aus ca. 30cm Entfernung gesendet!):
    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
    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.

    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #76
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    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

  7. #77
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    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

  8. #78
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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...

  9. #79
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Eigene Gefahr Gut!
    Mal sehen wie weit die IR-LED mit rund 40mA sendet!


    (Platz sparen)

    Mfg Harry

  10. #80
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Harry

    Ich bin sprachlos! Es funktioniert!
    Das freut mich sehr. Man könnte noch ein paar Optimierung durchführen, aber wenn es so funzt, ist es ja gut.

    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/12 ä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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 8 von 10 ErsteErste ... 678910 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen