ATMega128 und UART1 Problem

#437601
Lesenswert?

Hallo,
versuche heute schon den ganzen Tag ein Programm zum laufen zu bringen,
welches vom Mega128 Daten an den PC sendet, aber leider empfange ich im
Hyperterminal gar nichts! Verwende dafür STK500 + STK501, dabei wird der
RS232 Spare2 am STK501 verwendet, habe daher folgende zwei Brücken
gemacht:

STK501 RXD -> STK500 PortD2 (müßte der UART1 RXD Ausgang vom Mega128
sein)
STK501 TXD -> STK500 PortD3 (müßte der UART1 TXD Ausgang vom Mega128
sein)


Code hab ich euch online gestellt, müßte eigentlich passen. Hab ich
irgendwas zum überbrücken vergessen, oder falsch gemacht? Kabel nehm ich
das selbe wie beim Programmieren, wird nur umgesteckt. Mega103 Komp.
habe ich ausgeschaltet, ebenso JTAG.


Es erlischt und leuchtet wenigstens mal die LED0 am Board, wenn ich
irgendwelche Buchstaben im Hyperterminal eintippe (komisch zwar, dass
sich nur bei einer LED was tut), also ganz tot scheint die Leitung nicht
zu sein.


Bin echt verzweifelt, bitte um Hilfe!
Angehängte Dateien:
#437702
Lesenswert?

Hi,
habe ich auch schon gemacht, aber geholfen hat es eigentlich nichts, da 
ich nicht genau weiß, welches ich auswählen soll!

Ich habe es mal mit folgendem probiert:
Ext. RC 0sc. 3 - 8 Mhz 6CK + 4ms

Soll ich einen anderen verwenden und wenn ja, welchen?
#438826
Lesenswert?

Hab jetzt immer noch ein kleines Problem und zwar habe ich mein Programm
jetzt so programmiert, dass ich durch drücken einer der Taster am STK500
einen Text zum PC übertrage und zwar mittel Interrupt. Die Übertragung
klappt auch, aber nur beim ersten drücken einer Taste, drücke ich
nachher noch einmal eine Taste, so tut sich nichts mehr. Im Simulator
hat es funktioniert, bin etwas ratlos!

Wäre schön, wenn mir jemand helfen könnte!
Angehängte Dateien:
Gast #438927
Lesenswert?

1. Fehler:

   volatile uint8_t head;
   (...)
   head=-1;

Warum deklarierst du "head" als unsigned(!) int und weist ihr dann einen 
signed(!) Wert von -1 zu? Müsste da nicht schon der Compiler meckern?

Gruß,
Magnetus

P.S.: Ich such mal noch ein wenig weiter nach Fehlern... ;)
Gast #438931
Lesenswert?

1
int main(void)
2
{
3
  int baud;
4
  
5
  head=-1;
6
    
7
  DDRA = 0x00;
8
  DDRB = 0xFF;
9
  
10
  baud=cpuclock/((baudrate*16UL)-1);  
11
  init_usart1(baud);
12
  sei();
13
   (...)
14
}

1
// Init USART1
2
void init_usart1( unsigned int baud )
3
{
4
  cli();
5
   (...)
6
  sei();
7
}

cli() und sei() haben in der init_usart1 NICHTS zu suchen!!!

sei() steht ohnehin in der main() unmittelbar nach dem Aufruf der 
init_usart1().

So... das wars vorerst mal von meiner Seite. Übernimm mal die genannten 
Änderungen in dein Programm und gib dann bescheid, wie es gelaufen ist.

Gruß,
Magnetus
#438996
Lesenswert?

@Magnetus:

Hi,
danke für deine Anregungen, bin noch Anfänger, daher tue ich mir bei 
manchen Sachen noch etwas schwer!

Habe deine Änderungen übernommen, aber leider ist das Verhalten immer 
noch wie vorher, die Ausgabe funktioniert nur beim ersten drücken der 
Taste!



@Walter:

Habe den Code jetzt umgeschrieben auf diese Version:

ISR(USART1_RX_vect)
{
  head++;

  if(head >15)
  {
     head = 0;
  }

  buffer[head] = UDR1;
}


Mit dem head nicht mehr als unsigned int, jetzt müßte es passen!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren