- 12V Akku mit 280 Ah bauen         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Atmega8 + MAX485

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348

    Atmega8 + MAX485

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen,

    ich versuche seit ein paar Tagen einen Atmega8 mittels MAX485 in ein RS485 Halbduplex netzwerk ein zu binden.

    Mein Problem ist, egal was ich den µC senden lasse ich bekomme immer einen Murx raus. Habe versucht per Tastendruck die Zahl 300 als Integer mit Printbin zu senden: Erhalten müsste ich ja etwas wie 00000001 00101100, tatsächlich erhalte ich aber 00000000 10000000. Ich habe die Crystal auf 8000000 und die Baud auf 19200 eingestellt. Das müsste dich so stimmen oder? Wo könnte mein Fehler liegen?

    Hier is der Schaltplan des MAX485.

    Klicke auf die Grafik für eine größere Ansicht

Name:	atmega.JPG
Hits:	55
Größe:	22,0 KB
ID:	19499

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ich habe die Crystal auf 8000000 und die Baud auf 19200 eingestellt
    ...und die Fusebits sind auch so eingestellt, dass das Teil mit 8 MHz läuft? Verwendest Du einen Quarz, oder den internen RC-Oszillator?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Wie müsste denn die Einstellung der Fusebits aussehen für den Atmega8, dass er mit 8 MHz und 19200 Baud läuft?

    Ich dachte das der Atmega8 einen internen Oszillator hat?

    Wird eigentlich in Bascom die Einstellung in meinem Projekt gespeichert wenn ich was in den Fusebits ändere?
    Geändert von demmy (02.08.2011 um 07:51 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Klar, der Mega8 hat natürlich einen internen RC-Oszllator. Im Auslieferungszustand ist der aber auf eine Frequenz von 1 MHz eingestellt. Wenn Du also noch nichts an der Fuses geändert hast, wird er wohl noch mit dieser Taktfrequenz laufen.

    Das kannst Du ganz einfach testen, indem Du eine LED in einem bestimmten Takt blinken lässt, z.B. einmal pro Sekunde ein und aus:
    Code:
    $regfile = mega8def.dat   (oder so...)
    $Crystal = 80000000
    
    Config PortX.Y = output
    
    Do
    Toggle PortX.Y
    Waitms 500
    Loop
    Wenn das Programm in "Zeitlupe" läuft, ist der tatsächliche Takt langsamer als der Wert bei $Crystal.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Mhh ok das heißt also ich muss den Internen Oszillator auch auf 8 MHZ einstellen um 19200 Baud zu erhalten?
    Ich habe auch gelesen, dass man einstellen kann ob der interne oder ein externer Oszillator verwendet werden soll. Ich würde gerne den Internen nutzen.
    Wie müssten denn die Einstellungen dann aussehen?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Mhh ok das heißt also ich muss den Internen Oszillator auch auf 8 MHZ einstellen um 19200 Baud zu erhalten?
    Na ja - ob 19.200 Baud mit 1 MHz nicht vielleicht auch klappen könnten, müsste man mal schauen (dazu später mehr). Aber eins steht fest: Die Angabe bei $Crystal legt NICHT fest, mit welchem Takt der Controller läuft! Das kann man ausschließlich mit den Fusebits einstellen (die übrigens auch unverändert bleiben, wenn Du "normalen" Programm-Code in den Controller brennst).
    Wenn aber der tatsächliche Takt (Fuses) und die Angabe bei $Crystal nicht übereinstimmen, sind alle zeitlichen Berechnungen falsch, die Bascom macht. Und dann kann´s mit einer koordinierten Übertragung via RS232 nicht klappen.

    Also solltest Du vielleicht erstmal den internen Takt auf 8MHz stellen. Wie das in Bascom geht, weiß ich nicht, da ich meine Fusebits mit einem anderen Programm bearbeite. Aber das dürfte ja nicht allzuschwer herauszufinden sein. Vorsicht ist bei der Option "externer" Takt geboten: Wenn Du diese Option einmal gewählt hast, schaltet sich der interne Oszillator ab - und dann hast Du erst wieder Zugriff auf den Controller, wenn Du ihn mit einem externen Taktsignal versorgst (z.B. einem 1MHz-Rechteckgenerator).

    Und zu den Baudraten muss man wissen, dass es zu jeder Taktfrequenz "passende" Baudraten gibt, d.h. Baudraten, die sich mit einer tolerablen Fehlerrate generieren lassen. Abweichungen von ein paar Prozent können schon nachhaltige Probleme bei der Datenübertragung verursachen. Deshalb wird auch oft empfohlen einen Quarz zu verwenden, wenn die UART-Schnittstelle benutzt werden soll. Schau im Netz einfach mal unter Baudraten-Rechner nach - da wirst Du einiges finden!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von demmy Beitrag anzeigen
    Mhh ok das heißt also ich muss den Internen Oszillator auch auf 8 MHZ einstellen um 19200 Baud zu erhalten?
    Ich habe auch gelesen, dass man einstellen kann ob der interne oder ein externer Oszillator verwendet werden soll. Ich würde gerne den Internen nutzen.
    Wie müssten denn die Einstellungen dann aussehen?
    Das Problem bei internen Takt, der ist nicht besonders genau was dann zu fehlern in der Übertragung führt weil die Baudrate nicht ganz stimmt. Mit 2400..4800 geht es noch ganz gut bei 19200 hmmmmm....Wenn Du noch keine Fuse verändert hast, stelle $Baut = 2400 ein und teste erst einmal ob die Übertagung an sich klappt. Wenn das der Fall ist kannst immer noch erhöhen. Denke daran...auf beiden Seiten 2400 Baut 8 N 1. Wie herum die AB TXRX angeschlossen werden müssen kannst Du mit dem Volt Meter messen die Pegel sollen + auf + / - auf- angeschlossen werden

    Gruß Richard

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Richard Beitrag anzeigen
    Das Problem bei internen Takt, der ist nicht besonders genau was dann zu fehlern in der Übertragung führt weil die Baudrate nicht ganz stimmt. Mit 2400..4800 geht es noch ganz gut bei 19200 hmmmmm....Wenn Du noch keine Fuse verändert hast, stelle $Baut = 2400 ein und teste erst einmal ob die Übertagung an sich klappt. Wenn das der Fall ist kannst immer noch erhöhen. Denke daran...auf beiden Seiten 2400 Baut 8 N 1. Wie herum die AB TXRX angeschlossen werden müssen kannst Du mit dem Volt Meter messen die Pegel sollen + auf + / - auf- angeschlossen werden

    Gruß Richard
    Also ich hatte bisher beim internen Oszilator nie Probleme mit dem UART.....selbst 38400 waren kein Problem. Aber wichtig ist halt das die Taktfrequenz intern stimmt damit die Berechnungen die Bascom aufgrund deiner Taktangabe macht, auch richtig sind und funktionieren. Im Zweifelsfall einfach einen Quarz anklemmen. Ist meistens eh besser und kostet auch nicht viel . Es gibt auch Quarze mit speziellen Frequenzen die extra für genaue Baudraten ausgelegt sind.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    So also ich habe jetzt versucht die Fusebits zu ändern, allerdings übernimmt er das irgendwie nicht??

    Eingestellt war folgendes:

    Klicke auf die Grafik für eine größere Ansicht

Name:	alt.jpg
Hits:	14
Größe:	44,0 KB
ID:	19529

    Ich habe dann versucht, dass ein zu stellen:

    Klicke auf die Grafik für eine größere Ansicht

Name:	soll.jpg
Hits:	5
Größe:	47,3 KB
ID:	19528

    Wenn ich dann auf Fusebits schreiben klicke wird zwar etwas geschrieben, aber sobald der µC neu ausgelsesen wurde steht der alte Wert wieder drinne.

    Ich Benutze einen ISP-Programmer falls das von interesse ist?

    Anschließend ist mir aufgefallen dass im Programm folgende Zeile eingefügt wurde.

    $prog &H00 , &H00 , &H00 , &H00 ' generated. Take care that the chip supports all fuse bytes.$PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.

    Daraufhin habe ich versucht das Programm neu zu übertragen was er auch gemacht hat. Am Ende jedoch stand etwas mit Fuse-bits, was mit einer Fehlermeldung abgebrochen wurde.

    Was mache ich falsch?

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Ich habe noch mie versucht in Bascom Fusebit's zu setzen viel zu kompliziert. Für so etwas nehme ich das Studio 4, das klappt immer.

    Gruß Richard

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Atmega8 und MAX485 an PC
    Von demmy im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 01.08.2011, 18:41
  2. Antworten: 23
    Letzter Beitrag: 15.12.2007, 20:36
  3. Unterschied ATmega8-16PC und ATmega8-16AC
    Von Christian 25 im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 01.10.2006, 20:09
  4. Max485 / Bascom Grundlagen
    Von Elkokiller07 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 12.09.2006, 10:55
  5. RS485 (MAX485) & Widerstände
    Von Spritey im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 10.03.2005, 11:00

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad