Forum: Mikrocontroller und Digitale Elektronik Atmel328 ;Serial Probleme


von Hannes (Gast)


Angehängte Dateien:

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 User
von Draco (Gast)


Lesenswert?

Glaskugel:

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

von nichtdurchblicker (Gast)


Lesenswert?

Hannes schrieb:
> Hallo,

Chaos und Chaos pur.

von Hannes (Gast)


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.

von Hannes (Gast)


Lesenswert?

problem gelöst er läuft mit 4mhz -.- . Trotzdem danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.