- fchao-Sinus-Wechselrichter AliExpress         
Seite 5 von 10 ErsteErste ... 34567 ... LetzteLetzte
Ergebnis 41 bis 50 von 95

Thema: RC5 Senden mit Attiny13

  1. #41
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    E-Bike
    Hallo

    Könnte man natürlich eleganter und effizienter machen, aber..
    Ach was, das ist doch prima und wenn es funktioniert kümmert sich später keiner mehr drum ob es noch besser geht. Wenn ich deine 4MHz mit Prescaler=1 und OCR1A=55 für 72kHz überschlage, komme ich mit meinen 126 bei 9,6Mhz und 76kHz schon in die richtige Größenordnung. Wie gesagt, in C (und mit einem größeren AVR) dürfte es nicht schwierig sein. Aber wir wollen ja einen tiny13 mit Bascom verwenden, das verhindert den Einsatz eines zweiten Timers zur Bildung der Bitlängen. Die doppelte Sende-LED ist eine gute Idee, aber für die miniZ-Anwendung dürfte wohl eine reichen und die Schaltung ist dann auch kompakter,

    Da unser Trägertakt beim tiny13 nun ja eigentlich funktioniert, könnten wir deine ISR zum Senden der Bits verwenden, jedenfalls die Strucktur. Aber ich muss mich noch etwas umschauen, denn der Platz wird eng und der Code sollte schlanker werden.

    36,764705882352941176470588235294 kHz...

    Richtig????
    Leider nicht, es sind ca. 18Hz. (zweimal Umschalten= eine Periode). Den Nachkommamüll kannst du dir übrigens sparen, denn der interne Takt des tiny13 ist nur ungefähr 9,6MHz deshalb ist auch die erzeugte Frequenz nur ein Schätzwert (Soweit ich weiß, kann man kann die tinys zwar kalibirieren, aber das habe ich noch nicht gemacht). Auf deinem Steckbrett könntest du das ja nachbauen, ein tiny13, zwei Widerstände und eine LED...

    Die Endlosschleife könnte auch so aussehen:

    Label:
    Goto Label

    und die LED würde trotzdem blinken, weil der Takt mit dem Timer0 erzeugt wird.

    ...die warteschleife sollte dann die do loop schleife sein mit dem bitmuster...
    Ja.

    Den tiny26/2313-Code kannst du nicht direkt auf den tiny13 übertragen, weil der eben nur einen Timer hat.

    Ich bastel mir jetzt auch mal eine kleine Schaltung und versuche mit den 38kHz meinen RP6 zu "blenden".

    Bis später

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #42
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    schaltung ist bereits nachgebaut muß nur noch dahinterkommen wie ich die werte für 38kHz ändern muß....


    mfg harry

  3. #43
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Wenn ich prescale auf 1.024 setzte hab ich dann 38khz ??? oder 18khz??

  4. #44
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Hallo Harry,

    für 38kHz, muß der OCR1C = 53 stehen, ergibt 37735Hz, oder auf 52 ergibt dann 38461Hz.
    Aber die Frequenz ist nicht so kritisch, auch nicht die Zeit der Pulse.

    Grüße
    Hans-Josef

  5. #45
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Nabend!

    Jetzt hab ich gerade den 2313 beschrieben, im grossen und ganzen funktioniert rc5send.

    Aber hat vielleicht irgendwer eine Ahnung wie oder welchen wert dass man ändern muß um die wiederholung zu erhöhen?

    jetzt sendet er ca alle 0,5sec.... geht das nicht schneller?

    denn wenns hier nicht funktioniert brauch ich es mit attiny13 garnicht weiter versuchen!

    Mfg Harry

  6. #46
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    So, hier ist mein RC5 Quellcode für den Tiny2313

    $regfile = "attiny2313.dat"
    $crystal = 4000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 19200

    Config Portb = Output

    Dim Togbit As Byte , Command As Byte , Address As Byte

    Command = 12

    Togbit = 0

    Address = 0

    Do

    Rc5send Togbit , Address , Command

    Loop

    End






    Ist aus der Hilfe von Bascom mit kleiner modifikation.

    Nun meine Frage, wie kann ich das Ding dazu bringen das es schneller Sendet?


    Mfg Harry

  7. #47
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Da hatte sich noch ein kleiner Fehler eingeschlichen, das OCR0A wurde nach dem Match nicht gelöscht, deshalb war die Blinkfrequenz nicht änderbar. Hier nun der funktionierende Bascom-Code für einen 9,6Mhz ATtiny13 und 36Khz Trägerfrequenz an Pin5:
    Code:
    'RC5-Code senden mit ATtiny13                         13.12.2007'
    
    $regfile = "ATtiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 8
    $framesize = 16
    
    
    Config Portb.0 = Output
    Config Timer0 = Timer , Compare A = Toggle , Prescale = 1 , Clear Timer = 1
    
    Ocr0a = 133 '133=36kHz 126=38kHz'
    
    
    Do
     Waitms 1000
    Loop
    Das Progrämmchen von heute morgen blinkte mit nur 18Hz damit man es mit eigenen Augen erkennen kann.

    Offensichtlich ist inzwischen der tiny13 für euch gestorben, dann werde ich meine Aktivitäten auch einstellen. Schade. Vielleicht werde ich das Thema mal wieder aufgreifen und irgendwas in Richtung IR-Barke, TV-Ausschalter oder IR-Datensender auf tiny13-Basis zusammenbasteln.

    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!

  8. #48
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Hi, Mic

    Der tiny ist nicht gestorben, ich wollte nur mit dem 2313 feststellen ob das software Oszi das darstellen kann damit ich dann den tiny vergleichen kann!

    Mfg Harry

  9. #49
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Zu, Mic

    Ich denke dieses Oszilloskop ist einfach unbrauchbar, die Frequenzanalyse liegt bei 5kHz....

    Somit kann ich das messen vergessen.

    Dein Programm funktioniert wunderbar!

    Werd versuchen das bittmuster reinzubekommen und vorallem noch den togglebit zum wechseln zu bringen!

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

    Der tiny ist nicht gestorben...
    Oh, dann habe ich das wohl fehlinterpretiert. Ich dachte, weil ihr euch nun auf größere AVRs stürzt, habt ihr den tiny13 aufgegeben.

    Inzwischen weiß ich auch, was ein Mini-Z-Car ist, allerdings habe ich noch keine technischen Daten wie Größe, Gewicht, Geschwindigkeit und Technik gefunden.

    Dafür habe ich meinen Code weiterentwickelt und sollte nun auch RC5-Daten senden können. Allerdings mit 36kHz-Trägerfrequenz, weil damit das Bittiming sehr einfach ist. Der 36kHz-TSoP kosten nur ein Euroundeinbisschen, wir müssen also nicht zwingend den 38kHzler verwenden.

    Ich hab's aber noch nicht geflasht, weil mein Programmer aus irgendeinem Grund nicht mehr funktioniert. (Das Teil ist zickiger als der asuro-Transceiver). Trotzdem zeige ich euch mal meinem momentanen Stand (es ist mein erstes erstes ernsthaftes bascom-Programm), vielleicht erkennt ja jemand auf Anhieb gravierende Fehler oder kann einen Tipp zu den Kompillerdirektiven geben:
    Code:
    'RC5-Code senden mit ATtiny13 (erster ernsthafter Versuch mit Bascom)  14.12.07 mic'
    
    'Achtung! Das ist ein eher theoretischer Code den ich noch nicht getestet habe!'
    'Es sollten im 0,5 Sekundentakt die Werte 0 bis 31 als Addresse und Kommando'
    'mit Togglebit=0 gesendet werden. Ob das so funktioniert muss ich noch   testen'
    
    '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 mußte 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'
    '64-33 bedeutet erstes Manchester-Halbbit, 32-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
    
    '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'
    'Anmerkung für Harry: Ob das Bittiming bei 38kHz funktioniert weiß ich nicht,'
    'aber ein 36kHz-LSoP kostet nur ca. 1,xx Euro + Versandkosten im Onlineversand'
    Ocr0a = 133
    
    'ISR für Timer0 bei OutputCompareA definieren'
    On Timer0 Rc5_isr
    
    'Interrupts für Timer0 erlauben'
    Enable Timer0
    
    'Interrupts generell erlauben'
    Enable Interrupts
    
    'Timer anhalten'
    Stop Timer0
    
    'Es wird noch wird nicht gesendet'
    Rc5_halbbit = 0
    
    'und IR-LED aus'
    Config Portb.0 = Input
    
    
    'Hauptprogramm --------------------------------------------------------------'
    
    Do
     For Count = 0 To 31
       Call Rc5_send(count , Count , 0)
       Waitms 500
     Next
    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
    
       'Start der Übertragung mit dem ersten Halbbit'
       Rc5_halbbit = 64
    
       'Trägerfrequenz einschalten'
       Start Timer0
    
       'Ab hier übernimmt die ISR die Kontrolle. Wir warten, bis alle Bits gesendet sind'
       Do
          Wait 1
       Loop Until Rc5_bitmaske = 0
    
       'Trägerfrequenz ausschalten'
       Stop Timer0
    
       'LED ausschalten'
       Config Portb.0 = Input
    
       'Fertig'
    End Sub
    
    
    'Ab hier folgt die ISR'
    Rc5_isr:
    
       '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 = 64 Then
    
             'geben wir das erste Halbbit invertiert aus (Manchestercodierung?)
             If Rc5_bit_gesetzt > 0 Then
                Config Portb.0 = Input
             Else
                Config Portb.0 = Output
             End If
          'ende erstes Halbbit'
          End If
    
          'Beim zweiten Halbbit müssen wir nun den gewünschten Bitstatus ausgeben'
          If Rc5_halbbit = 32 Then
             If Rc5_bit_gesetzt > 0 Then
                Config Portb.0 = Output
             Else
                Config Portb.0 = Input
             End If
          'ende zweites Halbbit'
          End If
    
    
          'Bitzeit ist Trägerfrequenz/64, also wir zählen den Bittimer runter'
          Rc5_halbbit = Rc5_halbbit - 1
    
          '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 = 64
    
             'Dann setzen wir die Bitmaske auf as nächste zu sendende Bit'
             Rc5_bitmaske = Rc5_bitmaske / 2
    
             '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
    Return
    Laut Bascom belegt der Code 81% des Flash-Speichers, es sollte also noch Platz für die geplante Codierung der einzelnen Mini-Z-Renner sein.

    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 5 von 10 ErsteErste ... 34567 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test