Forum: Compiler & IDEs UART0 oder 1 bei Mega128


von Mike (Gast)


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?
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include <avr/signal.h>
5
#include <avr/pgmspace.h>
6
7
#include <avr/delay.h>
8
9
#include "uart.h"
10
11
#define UART_BAUD_RATE      19200   
12
13
int main(void)
14
{
15
  
16
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );   
17
  
18
  DDRD =  0xF0;
19
  PORTD = 0x00;
20
21
unsigned char Byte1 = 0;
22
unsigned char Byte2 = 0;
23
unsigned char Byte3 = 0;
24
unsigned char Byte4 = 0;
25
unsigned char Byte5 = 0;
26
unsigned char Byte6 = 0;
27
unsigned char Byte7 = 0;
28
unsigned char Byte8 = 0;
29
unsigned char Byte9 = 0;
30
unsigned char Byte10 = 0;
31
unsigned char Byte11 = 0;
32
unsigned char Byte12 = 0;
33
unsigned char Byte13 = 0;
34
unsigned char Byte14 = 0;
35
36
37
  PORTD |= (1<<PD4); //Reset 1
38
  PORTD &= ~(1<<PD4); //Reset 0
39
Byte1 = (PIND);
40
41
  PORTD |= (1<<PD5); //CLK
42
  PORTD &= ~(1<<PD5);
43
Byte1 = (PIND << 1) | Byte1;
44
45
  PORTD |= (1<<PD5);
46
  PORTD &= ~(1<<PD5);
47
Byte1 = (PIND << 2) | Byte1;
48
49
  PORTD |= (1<<PD5);
50
  PORTD &= ~(1<<PD5);
51
Byte1 = (PIND << 3) | Byte1;
52
53
  PORTD |= (1<<PD5);
54
  PORTD &= ~(1<<PD5);
55
Byte1 = (PIND << 4) | Byte1;
56
57
  PORTD |= (1<<PD5);
58
  PORTD &= ~(1<<PD5);
59
Byte1 = (PIND << 5) | Byte1;
60
61
  PORTD |= (1<<PD5);
62
  PORTD &= ~(1<<PD5);
63
Byte1 = (PIND << 6) | Byte1;
64
65
  PORTD |= (1<<PD5);
66
  PORTD &= ~(1<<PD5);
67
Byte1 = (PIND << 7) | Byte1;
68
69
70
uart_putc((unsigned char)Byte1 );
71
 
72
}

von Karl H. (kbuchegg)


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.
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/delay.h>
4
#include "uart.h"
5
 
6
#define UART_BAUD_RATE      19200
7
 
8
int main(void)
9
{
10
 
11
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
12
13
  while( 1 ) {
14
    uart_putc( 'T' );
15
    uart_putc( 'e' );
16
    uart_putc( 's' );
17
    uart_putc( 't' );
18
    uart_putc( ' ' );
19
  }
20
}

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


von Mike (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Mike (Gast)


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?

von Mike (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

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.