mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel328 ;Serial Probleme


Autor: Hannes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich verzweifele gerade, und hoffe es kann mir hier wer helfen.
Ich habe ein Board von einer VR Brille auf dem ein Atme328 darauf 
gelötet ist. Ich hab ihn über den ICSP Header gefunden. Jetzt habe ich 
versucht eine kleines Programm hochzuladen das mir Serial an mein 
Termite (Serial Com Programm) einen einfachen Text sendet leider kommt 
aber nur Blödsinn an.

Code Ausschnitt:

void uploadFont()
{
    uint16_t byte_count = 0;
    byte bit_count=0;
    byte ascii_binary[0x08];

    // move these local to prevent ram usage
    uint8_t character_bitmap[0x40];
    int font_count = 0;

    osd.clearScreen();

    // enable UART for update
    Serial.begin(9600);

    pinMode(7, OUTPUT);
    digitalWrite(7, false);
/*
 upload part .....

 */
    Serial.print("Font update done. Restarting system..\n\n");
    delay(2000);
    asm volatile ("  jmp 0");  // softstart by jumping to start vector
    // REBOOT, WILL NEVER GET HERE

}

Ich benutze die Wiring lib für die Serielle Kommunikation

Gruß

: Verschoben durch Moderator
Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glaskugel:

- Code Zeile 42?
- Warum der jmp?
- Wieviel Mhz?
- Wo ist die Baudberechnung?
- Was ist die Wiring lib?!?

Autor: nichtdurchblicker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes schrieb:
> Hallo,

Chaos und Chaos pur.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Wiring lib mit der kann man die Ausgänge Arduino like ansteuern.

Hab das ganze aber jetzt anders gelöst, ich will jetzt mal von Grund auf 
anfangen->

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE*16UL)))-1)

unsigned char USART_receive(void){

    while(!(UCSR0A & (1<<RXC0)));
    return UDR0;

}

void USART_send( unsigned char data){

    while(!(UCSR0A & (1<<UDRE0)));
    UDR0 = data;

}

void loop()
{

    char recieved_byte;

    UCSR0B |= (1<<RXEN0)  | (1<<TXEN0);
    UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
    UBRR0H  = (BAUD_PRESCALE >> 8);
    UBRR0L  = BAUD_PRESCALE;

    while (true) {

        recieved_byte = USART_receive();

        if (recieved_byte != 0) {

            digitalWrite(7, true);
            USART_send(recieved_byte); //callback

            osd.printMax7456Char(recieved_byte, 1, 1);
        }

        delay(1000);

        digitalWrite(7, false);


    }
}


Das müsste doch so funktionieren ? Bei den Mhz kann ich es nur erahnen 
aber ich denke es sind 16Mhz.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
problem gelöst er läuft mit 4mhz -.- . Trotzdem danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.