ATmega644 Uart ->Spi

Gast #2956948
Lesenswert?
• ▲
▼
Hi,
ich bin gerade ziemlich am verzweifeln.
ich habe das  ETH_M32_EX von Uradig mit einem ATmega644 und möchte per 
Uart per Hterm Hex zahlen eingeben, dass aus dem SPI binärcode 
herauskommt.
Eine kommunikation zwischen Uart und Hterm habe ich hinbekommen mit 
folgenden cod:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <string.h>
#include "Library/uart.h"



/* Konfiguration */
#ifndef F_CPU
  #define F_CPU 16000000UL
#endif

// UART

#define UART_BAUD_RATE      9600

void init(){
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );  //Uart 
Initialisieren
}


int main(void)
{
  unsigned int c;        //Zeichen von UART
    char command[10];      //String für Befehlt von UART
  int  command_complete = 0;  //Befehl vollständig
  int  command_counter = 0;   //Anzahl der Buchstaben innerhalb Befehl
  char wert[10];
  double zahl;
  int  laenge;
  init();
  uart_puts("\nTestausgabe\n");
    uart_puts("Ready>\n");
  sei();

  while(1)
    {
        c = uart_getc();
    if (!(c & UART_NO_DATA))
    {
      if ( c & UART_FRAME_ERROR )
            {
                uart_puts_P("UART Frame Error: ");
            }
            else if ( c & UART_OVERRUN_ERROR )
            {
                uart_puts_P("UART Overrun Error: ");
            }
            else if ( c & UART_BUFFER_OVERFLOW )
            {
                uart_puts_P("Buffer overflow error: ");
            }
      else{
        if(c != '\n') {
          command[command_counter] = c;
          command_counter++;

        }
        else{
          command[command_counter] = '\0';
          laenge = command_counter;
          command_counter = 0;
          command_complete = 1;

        }
      }
    }

    if(command_complete)
    {
      if (command[0] == 'a'){
        uart_puts("\nDu hast Befehl A ausgewählt\n");
      }
      else if (command[0] == 'b'){
        uart_puts("Befehl B mit Parameter : ");
        strncpy(wert,&command[1],laenge-1);

        uart_puts(wert);
        zahl = strtol(wert,NULL,16);
        utoa(zahl,wert,2);
        uart_puts(wert);
        uart_puts("\n");

      }
      else if (command[0] == 'c'){
        uart_puts("Start");
        }
      else{
        char str[20] = "Unbekannter Befehl: ";
        strcat(str , command);
        uart_puts(str);
      }
      uart_puts("Ready> ");
      command_complete = 0;
    }
    }
}

Habe auch versucht das AVR303 umzuschreiben, aber leider ohne erfolg.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.