RC5 mit Software-UART

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • RC5 mit Software-UART

      Hallo Spezis,
      ich muss leider ein älteres Problem wieder aufgreifen:
      ??????????????????
      Dieses Gerät möchte ich um einen RC5-Sender erweitern.


      Leider sendet der ATmega162 mit dem Baudratenquarz nicht (korrekt):

      Rc5send 0 , 7 , 15
      ATMega162_14_7456MHz_RC5send.png Mit den 14,7456 MHz ergibt das (47µs) eine Trägerfrequenz von ca.21 KHz


      Die selbe Hardware (aus der Bascom-Hilfe) an einem ATmega328 :
      ATMega328_16MHz_RC5send.png Mit den 16 MHz ergibt das (27µs korrekt) eine Trägerfrequenz von ca.36 KHz

      Da scheinbar die Berechnung der (soft-) seriellen und das RC5 senden nicht funktionieren behaupte ich mal, das der Compiler (2.0.8.1) ein Problem mit dem 162er hat.
      Leider bin ich der niederländischen und der englischen Sprache nicht mächtig und würde gern die Aufgabe diesen Umstand an Mark zu übermitteln einem (Moderator?) überlassen.

      Ich werde die Tage den Quarz am ATmega162 gegen einen mit 16 MHz tauschen und sehen was daraus wird.......................

      LG
    • unter den samples von bascom findest du das

      BASCOM-Quellcode

      1. '-----------------------------------------------------------------------------------------
      2. 'name : m162.bas
      3. 'copyright : (c) 1995-2005, MCS Electronics
      4. 'purpose : demo file for the M162
      5. 'micro : Mega162
      6. 'suited for demo : yes
      7. 'commercial addon needed : no
      8. '-----------------------------------------------------------------------------------------
      9. $regfile = "m162def.dat" ' specify the used micro
      10. '$crystal = 7372800 ' used crystal frequency
      11. '$crystal = 3684000
      12. $crystal = 8000000
      13. $baud = 19200 ' use baud rate
      14. $hwstack = 42 ' default use 32 for the hardware stack
      15. $swstack = 40 ' default use 10 for the SW stack
      16. $framesize = 40 ' default use 40 for the frame space
      17. ' The $prog directive will program the lock and fusebits with the following values
      18. ' 16-divider disabled, external oscillator enabled, JTAG disabled
      19. '$prog &HFF , &HEF , &HD9 , &HFF
      20. 'Everytime you program the chip, the lcok & fusebits will be programmed when they differ.
      21. 'For example when you insert a new chip
      22. 'Use with CARE as wrong values can lock the chip.
      23. 'baud rate for second serial port
      24. $baud1 = 19200
      25. ' TX RX
      26. ' COM0 PD.1 PD.0
      27. ' COM1 PB.3 PB.2
      28. 'the config lines are optional. By default the settings are 8 databits,None parity,1 stopbit
      29. Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      30. Config Com2 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 2 , Databits = 8 , Clockpol = 0
      31. 'use OPEN/CLOSE for using the second UART
      32. Open "COM2:" For Binary As #1
      33. 'dimension some variables
      34. Dim S As String * 10
      35. Dim B As Byte
      36. Print "Hello to COM1"
      37. Print #1 , "test COM2"
      38. 'get a key from COM2
      39. B = Inkey(#1)
      40. 'print value
      41. Print #1 , B
      42. 'wait for a key from port 2
      43. B = Waitkey(#1)
      44. Print #1 , B
      45. 'get data from COM2
      46. Input #1 , "s " , S
      47. Print #1 , S
      48. Printbin #1 , B
      49. Do
      50. 'use normal PRINT for COM1
      51. Print "com1"
      52. ' and add #1 for com2
      53. Print #1 , "com2"
      54. Waitms 500
      55. Loop
      56. 'make the CLOSE the last statement of your program
      57. Close #1
      58. Config Int2 = Rising
      59. End
      Alles anzeigen
      kannst ja mal testen, das ist ja Originalcode. Wenn der nicht mehr geht, dann ist wohl ein bug vorhanden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich finde in deinem Programm (vom link ) eine andere Quarzfrequenz als im Datenblatt vom mega162. Da ist sie mit fosc = 14.7456 MHz angegeben. Ist zwar nur ein kleiner Unterschied, aber wer weiß?

      BASCOM-Quellcode

      1. $regfile = "M162def.dat"
      2. $crystal = 14745100
      3. $hwstack = 256
      4. $swstack = 40
      5. $framesize = 40
      6. Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 9 , Clockpol = 0 'Hausbus
      7. Open "com2:" For Binary As #2
      8. Open "coma.5:16300,8,n,1" For Output As #3 'ergibt 9600 Baud !!!!!!!!!!!!!
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • o.K., weiter gehts...............
      Dieses Programm:

      Quellcode

      1. $regfile = "M162def.dat"
      2. $crystal = 14745100
      3. $hwstack = 256
      4. $swstack = 40
      5. $framesize = 40
      6. Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
      7. Config Lcd = 16 * 1a
      8. Config Timer3 = Timer , Prescale = 256 'Timer1 für RC5Send !!!
      9. Timer3 = 7934 '1 Sek
      10. On Timer3 Timer3int
      11. Enable Timer3
      12. Start Timer3
      13. 'Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 9 , Clockpol = 0 'Hausbus
      14. 'Open "com2:" For Binary As #2
      15. Open "coma.5:16300,8,n,1" For Output As #3 'ergibt 9600 Baud !!!!!!!!!!!!!
      16. Config Portd.5 = Output 'RC5Send
      17. Portd.5 = 1
      18. Config Rc5 = Pina.4 , Timer = 2 , Wait = 2000
      19. 'für RC5
      20. Dim Command As Byte , Address As Byte , Tb As Byte , Tb_alt As Byte
      21. Dim Befehl As String * 10 , Befehl_alt As String * 10
      22. Dim Temp As Byte , N As Byte , Zeit As Word , Z As Byte , Zalt As Byte , N_alt As Byte
      23. Dim Temp2 As Byte , S$ As String * 40 , Fertig As Byte , Tempb As Byte , Zeiger As Byte
      24. Dim Sekunde As Byte , Minute As Byte , Stunde As Byte , Wochentag As Byte
      25. Dim Jahr As Byte , Monat As Byte , Tag As Byte , Schicht As Byte
      26. Enable Interrupts
      27. Befehl_alt = ""
      28. Initlcd
      29. Cls
      30. Cursor Off
      31. Locate 1 , 1
      32. Lcd "-------"
      33. Printbin #3 , &H02 ; &H01 ; &HF7
      34. Do
      35. Getrc5(address , Command)
      36. If Address < 255 Then
      37. Tb = Command And &B10000000
      38. If Tb = 128 Then Tb = 1
      39. Command = Command And &B01111111
      40. Gosub Anzeige_1
      41. If Address = 7 Then
      42. Select Case Command
      43. Case 42 'Alle AUF
      44. If Tb <> Tb_alt Then
      45. If Befehl_alt = "auf" Then
      46. Printbin #3 , &H02 ; &H06 ; &HF1 ; &H8C ; &H78 ; &H00 ; &H00 ; &H00
      47. Befehl = "stop"
      48. End If
      49. End If
      50. If Befehl_alt <> "auf" Then
      51. Printbin #3 , &H02 ; &H06 ; &HF1 ; &H8C ; &H78 ; &H00 ; &H00 ; &H00
      52. Befehl = "auf"
      53. End If
      54. Rc5send 0 , 7 , 15
      55. Case 51 'Alle AB
      56. If Tb <> Tb_alt Then
      57. If Befehl_alt = "ab" Then
      58. Printbin #3 , &H02 ; &H06 ; &HF1 ; &H8C ; &H78 ; &H00 ; &H10 ; &H00
      59. Befehl = "stop"
      60. End If
      61. End If
      62. If Befehl_alt <> "ab" Then
      63. Printbin #3 , &H02 ; &H06 ; &HF1 ; &H8C ; &H78 ; &H00 ; &H10 ; &H00
      64. Befehl = "ab"
      65. End If
      66. End Select
      67. Rc5send 0 , 7 , 15
      68. End If
      69. Befehl_alt = Befehl
      70. Tb_alt = Tb
      71. End If
      72. Loop
      73. '_______________________________________________________________________________
      74. Anzeige_1:
      75. S$ = "Adr " + Str(address) + " "
      76. Locate 1 , 1
      77. Lcd S$
      78. S$ = "C " + Str(command) + "Tb" + Str(tb) + " "
      79. Locate 2 , 1
      80. Lcd S$
      81. Return
      82. '_______________________________________________________________________________
      83. Timer3int:
      84. Timer3 = 7934 '1 Sek
      85. Incr Sekunde
      86. If Sekunde = 60 Then
      87. Incr Minute
      88. Sekunde = 0
      89. End If
      90. If Minute = 60 Then
      91. Incr Stunde
      92. Minute = 0
      93. End If
      94. If Stunde = 24 Then
      95. Incr Wochentag
      96. Stunde = 0
      97. End If
      98. If Wochentag = 8 Then
      99. Wochentag = 1
      100. End If
      101. Return
      102. End
      Alles anzeigen
      erzeugt diesen Output:
      RC5sendb.png oben RC5send (21KHz) und unten ComA.5 9600 Baud 8N1

      Quarzfrequenz ist lt. Prägung 14,745 MHz.

      LG