- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 10 von 10 ErsteErste ... 8910
Ergebnis 91 bis 95 von 95

Thema: RC5 Senden mit Attiny13

  1. #91
    Neuer Benutzer Öfters hier
    Registriert seit
    05.07.2007
    Ort
    73105
    Alter
    52
    Beiträge
    8
    Anzeige

    Praxistest und DIY Projekte
    Hallo Mic.

    Hammer dasselbe (ähnlich) gedacht
    Mittlerweile ist mein Code von 76% auf 63% geschrumpft.
    Hab die ISR wegprogrammiert.
    Ich mach das mit dem Interrupt alles oben beim Sleep.
    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
    Disable Pcint0                                              'PcInt ausschalten
    
     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
    
    End If
    Jetzt hab ich nur noch ein Problem:
    Ich hab die Command´s 0,1 und 2.
    Wenn ich nun Command 0 drücke, kanns passieren (nicht immer),
    dasser beim loslassen den command 1 sendet. ?!?!?!?!???
    Solange ich die Taste drücke, bleibt er bei Null.
    Jetzt wirds bunt.

    Gruß Bernhard.

  2. #92
    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

    Bitte nicht lachen, ist nur ein Verdacht:

    'Hier kann man den gewünschten Code eintragen'

    Rc5_code = &B0011010010000001

    'Testcode: 2 Start, kein Toggle, Adresse 18, Kommando 1'
    Vielleicht macht der tiny13 einen Neustart. Zeig doch nochmal das komplette Programm in der aktuellen Version.

    Und nochmal mit bedingtem Schlafen und ISR versuchen. Möglicherweise "entprellt" der Aufruf der ISR auch die Taster etwas.

    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!

  3. #93
    Neuer Benutzer Öfters hier
    Registriert seit
    05.07.2007
    Ort
    73105
    Alter
    52
    Beiträge
    8

    Endergebnis

    Hallo Mic.

    Bin über meine eigene Euphorie gestolpert.
    Hatte die Wiederholzeit (100ms) auf 50ms reduziert.
    Da hat sich mein Empfänger wohl etwas täuschen lassen.
    80ms sind aber wieder ok.
    Hier mein letzter aktueller Code:

    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'
    '
    'Code von mir ( Pizzakurier ) https://www.roboternetz.de/phpBB2/vi...36253&start=66 geändert.
    'Nun können mit 3 Tastern (max.4) verschiedene IR Codes gesendet werden.
    'Wenn er fertig gesendet hat, geht der µC schlafen und brauch nur noch weniger als ein µA...
    'Batterie ( 2x 1,5V Micro ) hält damit ewig :-))
    'Danke an das tolle Forum und vor allem "radbruch" und "x1cr" für die Idee und Code.
    '
    '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
    Config Pinb.0 = Input                                       'ocr0a (IR-LED)
    Config Pinb.1 = Input                                       'Taste grün
    Config Pinb.2 = Input                                       'Taste rot
    Config Pinb.3 = Input                                       'n/c
    Config Pinb.4 = Input                                       'Taste blau
    Portb = &B00011110                                          'Pullup-Widerstände für Pb.1-4 aktivieren
    
    Mcucr = &B00110000                                          'Sleepmodus : 00110000 = Powerdown !
    Pcmsk = &B00011110                                          'Maske, welche Pins einen pcint auslösen dürfen (Pinb.1-4)
    Gimsk = &B00100000                                          'GIMSK Bit5 = PinChangeInterrupt eingeschaltet
    
    '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
    
    '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 = &B0011010010000001
        Rc5_code = &B0011000000000000
    
       'Testcode: 2 Start, kein Toggle, Adresse 0, Kommando 0'
       '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
    
    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
    Disable Pcint0                                              'PcInt ausschalten
    End If
    
     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
    
    
      '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 40
    Config Portb.0 = Input
    Portb.0 = 0
    Waitms 80
    
        'Das ist dann die Wiederholgeschwindikeit'
       '+++++++++++++++++++++++++++++++++++++++++'
    
       '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
    
    End                                                         'end program
    Das Prellen dürfte nicht stören, denn wenn der code erst mal gesetzt ist, ändert sich dieser nicht mehr beim prellen.
    Erst mit anderer Taste wird der code neu "gesetzt".


    Gruß Bernhard

  4. #94
    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 Bernhard

    Dann dürfte dies nun die offizielle und funktionierende Version sein. Prima Ergebniss.

    Die Wiederholfrequenz hatte ich auch im Verdacht (bei dir nun 40+80, laut Doku: "As long as a key remains down the message will be repeated every 114ms."), aber dann hätte ich Probleme beim Drücken und nicht beim Loslassen erwartet. Aber egal, wenn's funzt dann gut. Viel Spaß mit deiner beneidenswert hübschen Fernbedienung.

    (btw: Den nächsten Satz hatte ich bisher überlesen: "The toggle bit will retain the same logical level during all of these repeated messages." Bedeutet also, nur toggeln, wenn Taste erneut gedrückt wurde. Das ist dann oben bei meinem letzten Vorschlag nicht richtig)

    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!

  5. #95
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Guten Morgen Jungs,

    Also, ich als Auslöser dieses Themas bin begeistert von dem Ergebniss!

    Aber warum hat sich damit noch nicht früher jemand beschäftigt....?

    Also ich denke das so mancher nun auf den 2313 verzichtet und alles ein bisschen kleiner baut!

    Leider bin ich noch nicht dazu gekommen Sender in mein Auto einzubauen und der USB Empfänger ist auch noch nicht gebaut.

    Einzige Lösung wäre weniger zu arbeiten oder den Tag zu verlängern.

    Der einzige Wehrmutstropfen.... die Teile hab ich schon, nun fehlt nur noch die Umsetzung.

    Mfg
    Harry

Seite 10 von 10 ErsteErste ... 8910

Berechtigungen

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

Solar Speicher und Akkus Tests