Daten übertragen von Tiny13 nach Tiny2313

    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!

    • Daten übertragen von Tiny13 nach Tiny2313

      Hallo,
      ich habe wieder ein Problem , und weis nicht weiter.
      Ich messe mit Tiny13 Spannungen über ADC. Diese Werte möchte ich an einen
      Tiny2313 übergeben mittels Rs232.
      Der Tiny13 funktioniert insoweit, das ich die Daten am PC bei "Putty" angezeigt
      bekomme. Der Tiny2313 empfängt aber nur Werte von "0".

      BASCOM-Quellcode

      1. $regfile = "attiny13a.dat"
      2. $crystal = 9600000
      3. $swstack = 16
      4. $hwstack = 8
      5. $framesize = 32
      6. Dim U1 As Word
      7. Dim U2 As Word
      8. Config Adc = Single , Prescaler = Auto
      9. Start Adc
      10. Open "comb.1:4800,8,n,1" For Output As #1
      11. Do
      12. U1 = Getadc(3)
      13. Print #1 , U1
      14. U2 = Getadc(2)
      15. Print #1 , U2
      16. Waitms 500
      17. Loop
      18. End
      Alles anzeigen

      Das ist der Code vom Tiny13

      BASCOM-Quellcode

      1. $regfile = "attiny2313a.dat"
      2. $crystal = 8000000
      3. $swstack = 16
      4. $hwstack = 16
      5. $framesize = 48
      6. $baud = 4800
      7. Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , Rs = Portb.6
      8. Config Lcd = 16 * 2
      9. Cursor Off
      10. Cls
      11. Enable Interrupts
      12. Dim Mess1 As Word
      13. Dim Mess2 As Word
      14. Dim U1 As Word
      15. Dim U2 As Word
      16. Dim I1 As Word
      17. Dim I2 As Word
      18. Dim Ube As Word
      19. Dim V As Word
      20. Do
      21. Input , Mess1
      22. U1 = Mess1
      23. Input , Mess2
      24. U2 = Mess2
      Alles anzeigen
      und das der Teil ,der die Daten vom Tiny13 empfangen soll

      Mein Problem ist, warum sind die Werte U1 und U2 "0" ?
      Parallel dazu zeigt mir das Terminalprogramm aber Werte an.

      Wer was weis, immer her damit.

      Gruß
      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Wo ist beim Empfänger der 'loop'? Ist nicht komplett, dein Programm.

      Gab's beim tiny13 keine Fehlermeldung? Deine stackangaben sind für den zu groß, da bleibt kein Platz für die Variablen.
      Mist, ich hab' mich verrechnet.
      Raum für Notizen

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

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

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • @tschoeatsch

      tschoeatsch schrieb:

      Wo ist beim Empfänger der 'loop'? Ist nicht komplett, dein Programm.
      ja ist nicht komplett, dahinter kommen nur Berechnungen, sind für
      das Problem nicht wichtig. Loop ist aber da.
      Ich hatte auch mal probeweise nach Zeile 29 "LCD U1........LCD U2 eingegeben.
      Ergebnis "0" "0"

      Ich vermute ja , das es an der Dimensionierung der Variablen liegt.
      Finde aber kein pro oder kontra für die Vermutung.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dekaman ()

    • Also, ich kenn mich mit serielle net aus, aber es wird entweder ein byte oder ein string übertragen. Von einem word weiß ich nix, aber ich kenn mich ja nicht aus. Vielleicht solltest du deinen Messwert in einen string wandeln und noch eine Kennung, welcher Messwert das ist davor hängen. An der Empfängerseite auch einen string einlesen und verarbeiten.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ich liege nicht ganz verkehrt, in der Hilfe steht:
      PRINT will automatic convert numeric variables into the string representation.
      This means that when you have a byte variable named B with the value of 123, the numeric variable is converted into a string "123" and then printed.
      In this case, print will print 3 characters or bytes. When you want to print the byte you can use the chr() function : print chr(b);
      This will send just one byte to the UART.

      Also dein Print mach aus deinem word 4 Zeichen und schickt die weg. Dein input soll ein word empfangen, das passt nicht.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Vielleicht so ?
      DIM UC as String*6
      UC=STR(U1)
      UC="UC"+UC
      Print #1,UC
      für den Sender

      dim UC as String *6
      Dim k as String*2
      Input , UC
      k=mid(UC,3,4))
      U1=Val(k)
      für den Empfänger

      so in etwa ?
      werde ich morgen mal probieren.
      Kann schon sein, das Word so nicht übertragen wird. Passt aber
      beim Monitorprogramm.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Schau dir mal diesen Code von djmsc an.Sollte alle deine Fragen beantworten.
      @mega

      Sender:

      BASCOM-Quellcode
      1. 'Vers. 2 Sendende ATmega8
      2. $regfile ="m8def.dat"
      3. $crystal = 8000000
      4. $hwstack = 32
      5. $swstack = 10
      6. $framesize = 40
      7. $baud = 9600
      8. 'Config Timer1 = Timer , Prescale = 256
      9. 'On Timer1 Timer1_isr
      10. 'Enable Timer1
      11. 'Timer1 = 3036
      12. Dim A As Byte
      13. Dim Texte(6) As String * 5
      14. Dim Gesendet As String * 5
      15. 'A = 0
      16. 'Dim S As Bit
      17. 'S = 0
      18. 'Enable Interrupts
      19. 'Versuchsweise, bringt aber nichts
      20. 'Config Pind.0 = Input 'RXD
      21. 'Config Portd.1 = Output 'TXD
      22. '---------------------------------
      23. Config Portd.6 = Output 'LED für A = 0 u. 1
      24. Config Portd.7 = Output 'LED für A = 2 u. 3
      25. Config Portb.0 = Output 'LED für A = 4 u. 5
      26. Config Portc.5 = Output 'Led für S
      27. Texte(1) = "SET1"
      28. Texte(2) = "SET2"
      29. Texte(3) = "SET3"
      30. Texte(4) = "SET4"
      31. Texte(5) = "SET5"
      32. Texte(6) = "SET6"
      33. A = 1
      34. Do
      35. Print Texte(a)
      36. Gesendet = Texte(a)
      37. Wait 5
      38. Incr A
      39. If A = 7 Then A = 1
      40. If Gesendet = "SET1" Then
      41. Portd.6 = 0
      42. Else
      43. Portd.6 = 0
      44. 'Printbin 0
      45. 'Waitms 100
      46. 'Gosub Sub_a
      47. End If
      48. If Gesendet = "SET2" Then
      49. Portd.6 = 1
      50. Else
      51. Portd.6 = 0
      52. 'Printbin 1
      53. 'Waitms 100
      54. 'Gosub Sub_a
      55. End If
      56. If Gesendet = "SET3" Then
      57. Portd.7 = 0
      58. Else
      59. Portd.7 = 0
      60. 'Printbin 2
      61. 'Waitms 100
      62. 'Gosub Sub_a
      63. End If
      64. If Gesendet = "SET4" Then
      65. Portd.7 = 1
      66. Else
      67. Portd.7 = 0
      68. 'Printbin 3
      69. 'Waitms 100
      70. 'Gosub Sub_a
      71. End If
      72. If Gesendet = "SET5" Then
      73. Portb.0 = 0
      74. Else
      75. Portb.0 = 0
      76. 'Printbin 4
      77. 'Waitms 100
      78. 'Gosub Sub_a
      79. End If
      80. If Gesendet = "SET6" Then
      81. Portb.0 = 1
      82. Else
      83. Portb.0 = 0
      84. 'Printbin 5
      85. 'Waitms 100
      86. 'Gosub Sub_a
      87. End If
      88. Loop
      89. End
      90. '(
      91. Timer1_isr:
      92. Timer1 = 3036
      93. Toggle S
      94. Return
      95. Sub_a:
      96. If S = 1 Then
      97. Incr A
      98. S = 0
      99. End If
      100. If A > 5 Then
      101. A = 0
      102. End If
      103. Return
      104. ')
      Empfänger:

      BASCOM-Quellcode
      1. 'Empfangs ATmega8 Vers. 2.3
      2. $regfile = "m8adef.dat"
      3. $crystal = 8000000
      4. $hwstack = 32
      5. $swstack = 10
      6. $framesize = 40
      7. $baud = 9600
      8. 'Config Pind.0 = Input 'RXD
      9. Config Portb.5 = Output 'LED grün
      10. Led_gruen Alias Portb.5
      11. Config Portb.3 = Output
      12. Led_rot Alias Portb.3 'LED rot
      13. Config Portb.4 = Output 'LED gelb
      14. Led_gelb Alias Portb.4
      15. 'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
      16. 'Config Lcd = 16 * 2
      17. 'Enable Interrupts
      18. Dim A As String * 5
      19. 'Cls
      20. 'Cursor Off
      21. 'Locate 1 , 1
      22. 'Lcd "UART Test"
      23. 'Wait 5
      24. 'Cls
      25. Do
      26. Input A
      27. A = Mid(a , 2 , 6)
      28. If A = "SET1" Then
      29. Led_rot = 0
      30. End If
      31. If A = "SET2" Then
      32. Led_rot = 1
      33. Else
      34. Led_rot = 0
      35. End If
      36. If A = "SET3" Then
      37. Led_gelb = 0
      38. End If
      39. If A = "SET4" Then
      40. Led_gelb = 1
      41. Else
      42. Led_gelb = 0
      43. End If
      44. If A = "SET5" Then
      45. Led_gruen = 0
      46. End If
      47. If A = "SET6" Then
      48. Led_gruen = 1
      49. Else
      50. Led_gruen = 0
      51. End If
      52. Loop
    • Ich kenn mich ja net aus, aber es schaut gut aus. Mit deinem UC, schreib doch U1 und U2 vorne weg, dann kannst du die Werte, die danach kommen, den Einzelnen Spannungen per if-Abfrage zuordnen.
      Das Terminal nimmt halt die einzelnen Zeichen und zeigt sie an. Der Bildschirm zeigt immer Zeichen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • @djmsc
      die werte werden vom Tiny13(Sender ) ausgegeben und über MAX232 an das
      Monitorprogramm des PC ausgegeben.

      @tschoeatsch
      Habe ich so noch nicht gelesen, aber ich werde wohl alles in Strings um-
      wandeln , senden , und im Empfänger mit VAL() wieder in wordvariable
      umwandeln. Das mit den Wordvariablen ist auch nicht auf meinem Mist
      gewachsen. Aber sowas passiert, wenn man nur Paste/Copy macht.
      Darüber sind schon ganz andere gestolpert.
      Morgen sehen wir weiter.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • ftelektro schrieb:

      Schon berichtigt.
      War in dieser Zeile nicht ein Tippfehler A = Mid(a , 2 , 6)
      "Mit der Funktion a = Mid(a, 2, 6) wird lediglich das Leerzeichen raus genommen. Die 6 ist allerdings ein Tippfehler es sollte 4 drin stehen."
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo,
      ich habe jetzt einmal etwas rumgetestet. Ich habe die Wortvariablen
      in Integer gewandelt. jetzt kann der Tiny2313 zumindest den Tiny13 hören.
      Der Empfänger versteht aber nur "Bahnhof"
      Dann habe ich die Daten, die der 2313 über RxD empfängt an TxD wieder
      ausgegeben und an das Terminal geschickt. Gleichzeitig über LCD
      sichtbar gemacht. Dort erscheint als erstes Zeichen immer 4 Balken
      untereinander mit jeweils 1 Zwischenraum. Ich kann das nicht deuten,
      weis auch nicht, wie ich an den ASCII Code kommen kann.
      wahrscheinlich kann ich deshalb den String auch nicht in eine numerische
      Variable zurück verwandeln.
      das Thema Atmega8 nach Atmega8 über Uart hilft nicht wirklich, der Tiny13
      hat sowas alles nicht. Die Verbindung zur Aussenwelt geht nur über "Open Com"

      das ist im Moment Stand der Dinge.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Ein 'print wordvariable' macht doch schon die Umwandlung (denke ich). Wenn die wordvariable den Wert 1023 hat, mach print '1', '0', '2' und '3' daraus. Und diese character empfängst du. Jetzt must du den empfangenen Text mit val
      Action
      Converts a string representation of a number into a number.
      Syntax
      var = VAL( s)
      In den Wert wandeln.
      Aber wie gesagt, so richtig auskennen tue ich mich magels Praxis mit seriellem Zeug nicht aus.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo,
      bislang sehe ich Lösungsversuche nur auf der Softwareseite, oder hab ich was übersehen?
      Häufig liegt die eingestellte Baudrate soweit daneben, dass eine Kommunikation nicht geht, weil die takfrequenz nicht so ist, wie erwartet.
      Mit dem Osccal-Register kann man die durch $crystal "bestimmte" Frequenz in weitem Rahmen ändern.
      (Daher läßt sich ein Tiny13 schön als Funktionsgenerator nutzen).
      Also, man schliesse ein Terminal-Programm an (bevorzuge Hterm) und printe etwas in Abhängigkeit vom Osccal-Wert.
      Bei einigen solschen Werten ist der Text dann lesbar, und den mittleren Wert merke man sich und nutze ihn fortan.
      Geht sowohl mit dem 13'ner als auch mit dem Tiny2313.
      Gruß, elektron
      Aus MCS Samples (für Attiny45):

      Quellcode

      1. $regfile = "attiny13.dat"
      2. $crystal = 8000000
      3. $hwstack = 32
      4. $swstack = 8
      5. $framesize = 16
      6. Open "comd.1:19200,8,n,1" For Output As #1
      7. Open "comd.0:19200,8,n,1" For Input As #2
      8. Config Portb = Output
      9. Dim B As Byte , W As Word
      10. For B = &H50 To &H80
      11. Osccal = B
      12. Waitms 500
      13. Print #1 , "OScCAL TEST:" ; B
      Alles anzeigen