Lib. DMX.C de Hendrik Hölscher para ATMEGA328P

  • Hallo. Und verzeihen Sie mein schlechtes Deutsch

    Ich bin auf der Suche nach einem Beispiel für die Lib. DMX.C von Hendrik Hölscher für ATMEGA328P

    Ich habe Probleme wegen meiner geringen Programmierkenntnisse und meiner Fehlinterpretation des Datenblatts.

    Konkret habe ich einen Fehler in diesem Teil des Codes

    Code
    UBRR0H = 0; //Empfang aktivieren
    
    UBRR0L = ((F_OSC/4000)-1); //250kbaud, 8N2
    
    UCSR0C = (1<<<UMSEL00)|(3<<<UCSZ00)|(1<<<USBS0);
    
    UCSR0B = (1<<<RXEN0)|(1<<<RXCIE0);
    
    gDmxState= IDLE;


    Geändert, wenn es bei mir nicht funktioniert

    Vielen Dank an alle, die mir helfen können.

  • Hallo,


    auf jeden Fall funktioniert die Berechnung der Baudrate so nicht.

    Ersetze mal die Zeilen 1 und 3 durch folgenden Code:


    Code
    uint16_t baud = (F_CPU / (2500000 * 16L) - 1);
    
    UBRR0H = (unsigned char) baud >> 8;
    UBRR0L = (unsigned char) baud;


    So sollte es funktionieren. Den Rest hab ich jetzt nicht überprüft, weil ich gerade kein passendes Datenblatt da hab.


    Gruß Carsten

  • Hallo und danke für Ihre Antwort

    Ich werde den Code kompilieren und auf dem Mikrocontroller testen.

    Ich werde hier die Ergebnisse kommentieren

    juan.

  • Hallo, versuchen Sie die Änderungen in der Lib

    aber bei mir funktioniert es nicht

    Ich glaube nicht, dass es an der Geschwindigkeit liegt.

    hat auf dem atmega8515 immer gut funktioniert

    Ich denke, das Problem liegt in der Konfiguration des usart.

    Code
    UCSR0C = (1<<<UMSEL00)|(3<<<UCSZ00)|(1<<<USBS0);
    UCSR0B = (1<<<RXEN0)|(1<<<RXCIE0);
    gDmxState= IDLE;


    Ich glaube, die Definitionen des atmega8515 unterscheiden sich vom atmega328p.

    Das geht aus dem Datenblatt hervor

    Ich glaube, das ist mein Fehler, aber ich weiß nicht, wie ich ihn beheben kann.


    juan

  • Hallo,


    sind denn die Ports richtig gesetzt und kommen Daten am Rx0-Pin an? (einfach Pegelwechsel detektieren und LED blinken lassen)

    Wenn Daten ankommen: Wird die RxC-ISR angesprungen? Werden überhaupt Interrupts behandelt (z.B. Timer-Interrupts)?


    Ich fürchte, Du musst beim Debugging weiter unten ansetzen... Und um das Datasheet vom mega328 kommst Du auch nicht herum.

    Ich meine der normale Arduino arbeitet mit diesem AVR. Irgendwer hatte mal meinen DMX-Code darauf portiert - ich hatte damit aber nie gearbeitet.


    Viel Erfolg

    Hendrik

  • Hallo und nochmals Entschuldigung für mein schlechtes Deutsch.

    Ich habe deine DMX LIB in .C auf dem atmega328p zum Laufen gebracht.

    Ich verwende das folgende Schema

    Dies ist die Leiterplatte, die ich für den Test gebaut habe.

    der Fusebit 16 MHz-Quarz und Watchdog

    Die getesteten Libs waren folgende

    MAIN.C

    LIB_DMX_IN.C

    LIB_DMX_IN.H

    Meine Frage ist, wenn UMSEL00 nicht in UCSR0C konfiguriert ist: C-Register für Steuerung und Status

    Und dass die LED-Anzeige lib funktioniert

    vielen Dank für Ihre Zeit

    juan