- Labornetzteil AliExpress    Werbung      
Ergebnis 1 bis 10 von 22

Thema: Atmega8 + MAX485

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    Zitat Zitat von demmy Beitrag anzeigen
    So also ich habe jetzt versucht die Fusebits zu ändern, allerdings übernimmt er das irgendwie nicht??

    Eingestellt war folgendes:

    Bild  

    Ich habe dann versucht, dass ein zu stellen:

    Bild  

    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?
    Wenn diese Zeilen in deinem Code erscheinen:

    $prog &H00 , &H00 , &H00 , &H00

    heißt das die Fuse-Bits werden bei der Ausführung des Programmes geändert! Dann bist du auf den "Write PRG"-Button gekommen. Dadurch schreibst du die Fuses in dein Programm. Wenn du die aber ohne Programm setzen willst musst du die einstellen und dann glaub ich "Write LB" drücken.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    ja das habe ich auch versucht, hat aber ebenfalls keinen Erfolg gehabt.

    Ich habe es jetzt mit einem anderen Programm versucht, und siehe da es hat funktioniert. Das tool heißt AVRProgTool. Damit ging das Lesen und Schreiben der Fusebits problemlos.

    Und jetzt empfange ich auch was über RS485.
    Ich habe die zahl 300 in Binär übertragen. Ich habe nur noch ein kleines Problem. Der 1. Teil also das erste Byte der Zahl scheint korrekt zu sein nur im 2. Byte verhaspelt er sich wohl noch? was kann das jetzt noch sein? Liegt das nun daran, dass der Oszillator nicht 100% zur Baudrate passt?

    Ich habe jetzt den Internen Oszillator so eingestellt:
    Int. RC Osc. 8 MHz ; Start up Time : 6 CK + 64 ms

    Was bedeuten denn die 64 ms??? es gibt auch noch kleinere Werte. Kann es daran liegen?

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    Zitat Zitat von demmy Beitrag anzeigen
    Ich habe jetzt den Internen Oszillator so eingestellt:
    Int. RC Osc. 8 MHz ; Start up Time : 6 CK + 64 ms

    Was bedeuten denn die 64 ms??? es gibt auch noch kleinere Werte. Kann es daran liegen?
    Die Startup Time sagt aus wie lange der Oszilator braucht um sich einzuschwingen. Also in dem Fall 64ms + 6 Clockzyklen glaub ich heißt das CK. Was heißt verhaspelt er sich? Was kommt da als Ergebniss raus?
    Und diese 64ms haben nichts mit der Baudrate zu tun. Diese Zeit ist nur nach einem Reset wichtig.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Also 300 wäre ja 00000001 00101100:

    ich empfange an : im 1. Byte 00101100
    im 2. Byte 11000000

    und im 2. Byte liegt der Fehler das müsste ja 00000001 sein!!
    Oder?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Also ich versteh es aktuell nicht.
    Ich habe jetzt mal noch ein paar Versuche gemacht. Zum einen habe ich 2 Byte mit jeweils einer 10 gesendet. Die erste 10 kommt sauber an. die 2. 10 ist irgend ein Mist. Egal was ich sende das 1. Byte passt und dann kommt nur noch Käse.

    Ich habe auch mit den Baudraten etwas herumgespielt. Egal was ich einstelle immer das selbe Bild.
    Woran könnte das noch liegen?

    Könnte es an den Abschlusswiderständen des Busses liegen? Hatte nur 110 Ohm statt 120 Ohm.

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    Nein die 10Ohm machen es nicht aus. Poste mal dein Code und eine komplette Verdrahtung.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Also die Schaltung sieht so aus:

    Bild  

    und das Programm:

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    'the internal oscillator of 8 Mhz was choosen in the fusebits
    $baud = 19200
    Osccal = &HAE
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 32                                               ' default use 32 for the SW stack
    $framesize = 50                                             ' default use 50 for the frame space
    
    
    'Ports Deklarieren
    Relais1 Alias Portc.0
    Config Relais = Output
    
    Rs485dir Alias Portd.2
    Config Rs485dir = Output
    Rs485dir = 0                                                ' Empfangsmodus
    
    Taster1 Alias Pinc.2
    Config Taster1 = Input
    Portc.2 = 1                                                 'PullUp-Widerstand einschalten
    
    Taster2 Alias Pinc.3
    Config Taster2 = Input
    Portc.3 = 1                                                 'PullUp-Widerstand einschalten
    
    Stromsensor Alias Pinc.4
    Config Stromsensor = Input
    Portc.4 = 1                                                 'PullUp-Widerstand einschalten                       
    
    $timeout = 100000
    
    'System-Timer für periodische Encoder-Abfrage
    Config Timer0 = Timer , Prescale = 256
    On Timer0 Isr_timer0
    Enable Timer0
    Const Timer0_reload = 250
    
    Config Debounce = 30                                       
    
    'Interrupt Daten wurden empfangen
    'On Urxc Onrxd                                               'Interrupt-Routine setzen (Daten über UART empfangen)
    'Enable Urxc                                                 'Interrupt URXC einschalten
    'Interrupt Daten wurden gesendet
    On Utxc Ontxd
    Enable Utxc
    
    Enable Interrupts                                           'Interrupts global zulassen
    
    
    'Variablendeklaration
    
    Dim Teilnehmeradresse As Byte
    Teilnehmeradresse = 10
    
    
    'MainLoop
     Do
    
     Loop
    
    On_taster1:
          Toggle relais
    
           'SENDETEST
          Rs485dir = 1
          Waitms 50
    
          Printbin Teilnehmeradresse ; Teilnehmeradresse;
    
    Return
    
    Ontxd:
    
     Waitms 50
     Rs485dir = 0
    
    Return
    
    'Timer 0
    
    Isr_timer0:
    Timer0 = Timer0_reload
    
    
          Debounce Taster1 , 0 , On_taster1 , Sub
    
    
    Return
    
    
    End

Ä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
  •  

    Werbung      fchao-Sinus-Wechselrichter AliExpress