Forum: Mikrocontroller und Digitale Elektronik Atmega8 + Uart + MK3


von Rene3233 (Gast)


Lesenswert?

Hallo ich habe ein Atmega8 mit dem ich über den MySmartMk3 per uart 
komonizieren will. Leider habe ich keinen plan wie das geht. alle 
anleitungen die ich zu uart ausprobiert habe funktionieren nicht. Ich 
hoffe ihr könnt mir helfen

mfg Rene3233

von Ingo (Gast)


Lesenswert?

Was genau geht denn nicht. Wenn du keinen Plan hast, informier dich 
erstmal...


Ingo

von error (Gast)


Lesenswert?


von Rene3233 (Gast)


Lesenswert?

Habe ich ja versucht naja es funktioniert nicht das ich mit putty was 
sehe -.- habe das mit diesem programm getestet: 
http://www.myavr.info/download/software/tool_mySmartUSB-Kommandos_de_en_fr.zip

von Uwe (de0508)


Lesenswert?

Ich kann nur sagen bei mir läuft der uart und auch ein software uart.

Aber damit kannst Du nichts anfangen, da wir über Dein Problem gar 
nichts wissen.

Man könnte ja etwas in Pascal, C , ASM oder BASCOM geschrieben habe und 
hier einstellen, dann wäre wir in der Lage, etwas mehr zu sehen.

_

von Rene3233 (Gast)


Lesenswert?

ok ich habe dieses Programm auf dem Mikrochip am laufen:
//---------------------------------------------------------------------- 
---
// Titel : einfaches Beispielprogramm für den mySmartControl M8
//---------------------------------------------------------------------- 
---
// Funktion : einfaches Terminalprogram, schaltet Ports und I/O-Lines
// Schaltung : USB an PC, Virtueller Comport, COMx, 9600 Baud, 8,n,1
//---------------------------------------------------------------------- 
---
// Prozessor : ATmega8
// Takt : 3686400 Hz
// Sprache : C
// Datum : 16.11.2007
// Version : 1.2
//---------------------------------------------------------------------- 
---
// created by myAVR-CodeWizard
//---------------------------------------------------------------------- 
---
#define   F_CPU   3686400
#include   <avr\io.h>
#define   BAUD   9600
//----------------------------------------------------------------------
// Titel   : C-Funktion Zeichen zu UART senden.
// IN       : char data
//----------------------------------------------------------------------
void uartPutChar(char data)
{
  //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
  while (!(UCSRA&32));
  //sende
  UDR=data;
}
void uartPutBin(char data)
{
  //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
  while (!(UCSRA&32));
  //sende
if (data&1)   uartPutChar('1'); else uartPutChar('0');
if (data&2)   uartPutChar('1'); else uartPutChar('0');
if (data&4)   uartPutChar('1'); else uartPutChar('0');
if (data&8)   uartPutChar('1'); else uartPutChar('0');
if (data&16)  uartPutChar('1'); else uartPutChar('0');
if (data&32)  uartPutChar('1'); else uartPutChar('0');
if (data&64)  uartPutChar('1'); else uartPutChar('0');
if (data&128) uartPutChar('1'); else uartPutChar('0');
}
//----------------------------------------------------------------------
// Titel   : C-Funktion wartet auf Zeichen von UART.
// OUT      : data
//----------------------------------------------------------------------
char uartGetChar()
{
  char data=0;
  //warte bis RX-complete RXC UCSRA / USR bei z.B.: AT090S2313
  while (!(UCSRA&128));
  //empfangen
  data=UDR;
  return data;
}
//----------------------------------------------------------------------
// Titel   : C-Funktion wartet auf Zeichen von UART.
// OUT      : data, error = keine Daten
//----------------------------------------------------------------------
bool error;
char uartIsChar()
{
  char data=0;
  error=true;
  //chek RX-complete RXC UCSRA
  if (!(UCSRA&128)) return 0;
  //zeihen abholen
  data=UDR;
  error=false;
  return data;
}
//----------------------------------------------------------------------
// Titel   : C-Funktion Zeichenkette zu UART senden.
// IN       : char *buffer, Zeichenkette mit NUll abgeschlossen
//----------------------------------------------------------------------
void uartPutString(char *buffer)
{
  for (int i=0; buffer[i] !=0;i++)
    uartPutChar (buffer[i]);
}
//---------------------------------------------------------------------- 
--
// Initialisierungen
//---------------------------------------------------------------------- 
--
void init()
{
  // UART initialisieren
  sbi(UCSRB,3);   // TX aktiv
  sbi(UCSRB,4);   // RX aktivieren
  UBRRL=(uint8_t)(F_CPU/(BAUD*16L))-1;   // Baudrate festlegen
  UBRRH=(uint8_t)((F_CPU/(BAUD*16L))-1)>>8;   // Baudrate festlegen
  //alles Ausgang
  DDRB=0b00111111;
  DDRC=0b11111111;
  DDRD=0b11111110;
}
// Willkommen- und Hilfebeildschirm
void intro()
{
  uartPutChar('\n');
  for (int i=0;i<42;i++) uartPutChar('=');
  uartPutString("\n mySmartControl Simple Term 1.2 \n www.myAVR.de");
  uartPutChar('\n');
  for (int i=0;i<42;i++) uartPutChar('-');
  uartPutString("\nKommandos: zwei Byte, Kein Trennzeichen");
  uartPutString("\n PB = PortB alle Bits ON");
  uartPutString("\n pb = PortB alle Bits OFF");
  uartPutString("\n PC = PortC alle Bits ON");
  uartPutString("\n pc = PortC alle Bits OFF");
  uartPutString("\n PD = PortD alle Bits ON");
  uartPutString("\n Bx = PortB Bit X ON  (X = 0..5)");
  uartPutString("\n bx = PortB Bit X OFF (X = 0..5)");
  uartPutString("\n Cx = PortC Bit X ON  (X = 0..5)");
  uartPutString("\n cx = PortC Bit X OFF (X = 0..5)");
  uartPutString("\n Dx = PortD Bit X ON  (X = 2..7)");
  uartPutString("\n dx = PortD Bit X OFF (X = 2..7)");
  uartPutString("\n iX = config Port(C,B,D) IN mit PullUP");
  uartPutString("\n ix = config Port(c,b,d) IN ohne PullUP");
  uartPutString("\n gx = get PIN(b,c,d)");
  uartPutString("\n GX = get Port(B,C,D)");
  uartPutString("\n Gx = get DDR(b,c,d)");
  uartPutString("\n Ox = config Port(B,C,D) = OUT");
  uartPutChar('\n');
  for (int i=0;i<42;i++) uartPutChar('=');
}
//////////////////////////////////////////////////////////////////////// 
/////
// Main-Funktion
//////////////////////////////////////////////////////////////////////// 
/////
main()
{
  unsigned char portBuffer[3]={0}; // B,C,D
  char z1,z2;
  init();   // Initialisierungen
  intro();
  while (true)    // Mainloop-Begin
  {
    // Kommandos abfragen
    z1=uartIsChar();
    if (error) continue;
    if (z1=='?')
    {
      intro();
      continue;
    }
    z2=uartGetChar();
    if (error) continue;
    if (z1=='?')
    {
      intro();
      continue;
    }
    switch (z1)
    {
      case 'I':
      case 'i':
      switch(z2)
      {
        case 'B':
        DDRB=0x00;
        PORTB=0xFF;
        break;
        case 'C':
        DDRC=0x00;
        PORTC=0xFF;
        break;
        case 'D':
        DDRD=0b00000010;
        PORTD=0b11111100;
        break;
        default:
        uartPutChar('?');
        break;
      }

      break;

      case 'g':
      switch(z2)
      {
        case 'B':
        case 'b':
        uartPutString("\nPinB=");
        uartPutBin(PINB);
        break;
        case 'C':
        case 'c':
        uartPutString("\nPinC=");
        uartPutBin(PINC);
        break;
        case 'D':
        case 'd':
        uartPutString("\nPinD=");
        uartPutBin(PIND);
        break;
      }
      break;
      case 'G':
      switch(z2)
      {
        case 'B':
        uartPutString("\nPortB=");
        uartPutBin(PINB);
        break;
        case 'C':
        uartPutString("\nPortC=");
        uartPutBin(PINC);
        break;
        case 'D':
        uartPutString("\nPortD=");
        uartPutBin(PIND);
        break;
        case 'b':
        uartPutString("\nDDRB=");
        uartPutBin(DDRB);
        break;
        case 'c':
        uartPutString("\nDDRC=");
        uartPutBin(DDRC);
        break;
        case 'd':
        uartPutString("\nDDRD=");
        uartPutBin(DDRD);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;

      case 'O':
      case 'o':
      switch(z2)
      {
        case 'B':
        DDRB=0b00111111;
        break;
        case 'C':
        DDRC=0b11111111;
        break;
        case 'D':
        DDRD=0b11111110;
        break;
        default:
        uartPutChar('?');
        break;
      }

      break;

      case 'P':
      case 'p':
      switch(z2)
      {
        case 'B':
        PORTB=0xFF;
        break;
        case 'C':
        PORTC=0xFF;
        break;
        case 'D':
        PORTD=0xFF;
        break;
        case 'b':
        PORTB=0x00;
        break;
        case 'c':
        PORTC=0x00;
        break;
        case 'd':
        PORTD=0x00;
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'B':
      switch(z2)
      {
        case '0':
        sbi(PORTB,0);
        break;
        case '1':
        sbi(PORTB,1);
        break;
        case '2':
        sbi(PORTB,2);
        break;
        case '3':
        sbi(PORTB,3);
        break;
        case '4':
        sbi(PORTB,4);
        break;
        case '5':
        sbi(PORTB,5);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'C':
      switch(z2)
      {
        case '0':
        sbi(PORTC,0);
        break;
        case '1':
        sbi(PORTC,1);
        break;
        case '2':
        sbi(PORTC,2);
        break;
        case '3':
        sbi(PORTC,3);
        break;
        case '4':
        sbi(PORTC,4);
        break;
        case '5':
        sbi(PORTC,5);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'D':
      switch(z2)
      {
        case '2':
        sbi(PORTD,2);
        break;
        case '3':
        sbi(PORTD,3);
        break;
        case '4':
        sbi(PORTD,4);
        break;
        case '5':
        sbi(PORTD,5);
        break;
        case '6':
        sbi(PORTD,6);
        break;
        case '7':
        sbi(PORTD,7);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'b':
      switch(z2)
      {
        case '0':
        cbi(PORTB,0);
        break;
        case '1':
        cbi(PORTB,1);
        break;
        case '2':
        cbi(PORTB,2);
        break;
        case '3':
        cbi(PORTB,3);
        break;
        case '4':
        cbi(PORTB,4);
        break;
        case '5':
        cbi(PORTB,5);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'c':
      switch(z2)
      {
        case '0':
        cbi(PORTC,0);
        break;
        case '1':
        cbi(PORTC,1);
        break;
        case '2':
        cbi(PORTC,2);
        break;
        case '3':
        cbi(PORTC,3);
        break;
        case '4':
        cbi(PORTC,4);
        break;
        case '5':
        cbi(PORTC,5);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      case 'd':
      switch(z2)
      {
        case '2':
        cbi(PORTD,2);
        break;
        case '3':
        cbi(PORTD,3);
        break;
        case '4':
        cbi(PORTD,4);
        break;
        case '5':
        cbi(PORTD,5);
        break;
        case '6':
        cbi(PORTD,6);
        break;
        case '7':
        cbi(PORTD,7);
        break;
        default:
        uartPutChar('?');
        break;
      }
      break;
      default:
      uartPutChar('?');
      break;
    }

  }
  // Mainloop-Ende
}
//---------------------------------------------------------------------- 
-----

von Karl H. (kbuchegg)


Lesenswert?

> ok ich habe dieses Programm auf dem Mikrochip am laufen:

Darf ich einen Vorschlag machen?

Bring erst mal ein minimal UART Programm zum Laufen.
Ein Programm, welches den UART initialisiert und in einer Endlosschleife 
ständig ein Zeichen sendet. Damit betreibt man dann erst mal 
Fehlersuche. Und wenn das dann funktioniert, dann gehts du in die 
Vollen. Aber es ist sinnlos, als Flachlandtiroler einen Trip zum Mt. 
Everest zu buchen. Selbst wenn du den besten Sherpa der Welt dabei hast, 
kann das nur schief gehen.

So auch hier: Es gibt ein paar Möglichkeiten, was da alles schief laufen 
kann. Und solange du die nicht aussortiert und kontrolliert hast, ist es 
Zeitverschwendung, irgendwoher ein Programm zu kopieren und zu denken, 
das würde alles auf Anhieb klappen.

Einfaches Testprogramm und wenn das nicht klappt, als allererstes die 
Taktfrequenz des µC, sowie die Verkabelung kontrollieren.

von Rene3233 (Gast)


Lesenswert?

ok das werde ich mal machen danke für die antwort. uart laüft doch über 
den isp anschluss oder?

von Rene3233 (Gast)


Lesenswert?

Vergisst die frage habe die antwort berets sry

von Rene3233 (Gast)


Lesenswert?

HAt wer auch den mysmartusb mk3 und kann mir tipps geben wie ich den 
anschlissen muss damit ich das zumindest richtig habe?

von Rene3233 (Gast)


Lesenswert?

Oder könnte mir wer ein programm geben was difinitif auf einem atmega8 
funktioniert damit ich da schon mal siche gehen kann das es nicht an der 
software leigt?

von Uwe (de0508)


Lesenswert?

Hallo,

bei welchem Takt soll der m8 laufen ?

Ist das ein Quarz oder der interne R/C Oszillator ?

Ich schreib Dir dann etwas zusammen.

von Uwe (de0508)


Angehängte Dateien:

Lesenswert?

Hier ist das Testprogramm.

Der Uart0 wird auf 9600 Baud @8Mhz eingestellt, das Programm kopiert 
alle Zeichen im Eingangpuffer wieder zum Ausgangpuffer.

Beide Puffer haben 32 Zeichen und werden über ISR gelesen, bzw. 
beschrieben.

Der WDT ist mit 1s aktiviert und Timer0 holt den µP alle 10ms aus dem 
Sleep-Mode.

_

von Jahat I. (jaib)


Lesenswert?

Hallo ich hab einem mySmartUSB MK2 und der muss zwischen 
Programmiermodus und Datenmodus umgeschaltet werden... er kann nur eines 
sein, Programmer oder Bridge. Die UART Leitungen laufen nicht über den 
ISP Stecker sondern über die 10poligen Sockelleisten unten. Umschalten 
und Anschlüsse sind in der techn. Beschreibung zu finden: 
http://shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl133 ... 
poste mal die Schaltung!

vielleicht hilft dir das ja weiter, Gruß Jahat

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.