mikrocontroller.net

Forum: Compiler & IDEs UART0 oder 1 bei Mega128


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe die Lib von Peter Fleury und wollte mit meinem Mega128 ein Byte 
zum PC senden. Dies funktioniert jedoch nicht. Ich glaube aber dass ich 
noch einstellen muss welche UART der Mega verwenden soll. Oder hab ich 
da einen anderen Fehler drin?
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>

#include <avr/delay.h>

#include "uart.h"

#define UART_BAUD_RATE      19200   

int main(void)
{
  
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );   
  
  DDRD =  0xF0;
  PORTD = 0x00;

unsigned char Byte1 = 0;
unsigned char Byte2 = 0;
unsigned char Byte3 = 0;
unsigned char Byte4 = 0;
unsigned char Byte5 = 0;
unsigned char Byte6 = 0;
unsigned char Byte7 = 0;
unsigned char Byte8 = 0;
unsigned char Byte9 = 0;
unsigned char Byte10 = 0;
unsigned char Byte11 = 0;
unsigned char Byte12 = 0;
unsigned char Byte13 = 0;
unsigned char Byte14 = 0;


  PORTD |= (1<<PD4); //Reset 1
  PORTD &= ~(1<<PD4); //Reset 0
Byte1 = (PIND);

  PORTD |= (1<<PD5); //CLK
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 1) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 2) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 3) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 4) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 5) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 6) | Byte1;

  PORTD |= (1<<PD5);
  PORTD &= ~(1<<PD5);
Byte1 = (PIND << 7) | Byte1;


uart_putc((unsigned char)Byte1 );
 
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike wrote:
> Hallo
>
> Ich habe die Lib von Peter Fleury und wollte mit meinem Mega128 ein Byte
> zum PC senden. Dies funktioniert jedoch nicht.

Kannst du das genauer spezifizieren?
Was funktioniert nicht?
Sendet der Mega nichts oder empfängst du Schrott

> Ich glaube aber dass ich
> noch einstellen muss welche UART der Mega verwenden soll.

Keine Ahnung ob die Fleury Lib überhaupt hier unterscheiden
kann oder immer die Standard-UART nimmt.
Wenn überhaupt, dann steht das aber im Header File "uart.h"
drinnen.

> Oder hab ich
> da einen anderen Fehler drin?

Mach mal ein einfacheres Testprogramm.
Deine Byte-Zusammensetzung sieht nicht gerade koscher aus.
#include <stdlib.h>
#include <avr/io.h>
#include <avr/delay.h>
#include "uart.h"
 
#define UART_BAUD_RATE      19200
 
int main(void)
{
 
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );

  while( 1 ) {
    uart_putc( 'T' );
    uart_putc( 'e' );
    uart_putc( 's' );
    uart_putc( 't' );
    uart_putc( ' ' );
  }
}

Jetzt klemmst du ein normales Terminalprogramm ans andere
Ende der UART und siehst nach, ob dort was ankommt.


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also am Hyperterminal kommt nichts an. Das Terminalprogramm funktioniert 
aber da es mit einem Mega 8 auch funktioniert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike wrote:
> Also am Hyperterminal kommt nichts an. Das Terminalprogramm funktioniert
> aber da es mit einem Mega 8 auch funktioniert.

Das heist nicht viel, wenn es mit einem anderen Prozessor geht.

Läuft der 128-er überhaupt? (Hast du das getestet?)
Ist die 103 Kompatibilitätsfuse abgedreht.

Läuft er auch wirklich mit der Frequenz, die du der
Library mitteilt. Hast die die Clock Fuses dafür richtig
eingestellt?


Da ich mal davon ausgehe, dass die Fleury Lib grundsätzlich
funktioniert, wird dir wohl nichts anderes übrig bleiben als
da mal in den Source Code hineinzuschauen, was da so passiert.

Bevor du das aber machst und obige Hardware Dunge geklärt sind,
würde ich mal Code für eine stinknormale serielle Verbindung
benutzen, wie er zb im Tutorial zu finden ist. Wenn es mit der
geht, dann ist der schuldige tatsächlich die Fleury Lib. Gehts
es mit der auch nicht, dann ist es wohl irgendwas an der
Hardware.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich habe jetzt alles noch mal kontrolliert. 16Mhz Quarz ist dran 
und Fuses sind auch alle richtig gesetzt. Der Mega läuft auch und die TX 
und RX Pins sind auch in ordnung da diese sich auch schalten lassen. Das 
mus also am Programm liegen. Hat jemand schon einen Mega128 mit UART 
betrieben?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe gerade bemerkt dass dies mit einem Mega8 auch nicht 
funktioniert. Irgendwas mus ich da falsch gemacht haben.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun klapts ich habe sei(); nicht drin gehapt.

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.