mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Usart atmega8515 finde fehler nicht


Autor: focus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, bin Anfänger in Cachen c unter µC und habe mich mal an den IAR c
Kompiler herangewagt. Nun stehe ich jedoch vor einem Problem und weiss
nicht so recht weiter. Nach meinem Verständnis müsste das Programm
ständig die Werte aus received auf das usart ausgeben. Wenn ein neues
Zeichen über die Schnittstelle eintrifft wird dies in received
gespeichert und von nun an geschickt.
Kann mir jemand sagen ob ich etwas falsch mache? Im Netz findet sich
leider auchnicht allzuviel zum Thema AVR und IAR, oder zumindest finde
ich es nicht ;-)

Vielen Dank Michael

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens: falsches Forum.  Das hier ist das GCC-Forum, da wirst Du kaum
die Experten für den IAR finden.

Zweitens: Du solltest Deinen Fehler vielleicht beschreiben.
Kristallkugeln sind Mangelware heutzutage, oder woher sollen wir denn
sonst erfahren, was da genau passiert bei Dir?

Drittens: um off-topic zu werden :), beim GCC müßtest Du `received'
als `volatile' deklarieren um zu verhindern, daß der Compiler den
(für
ihn nicht erkennbaren) Zugriff aus der Interruptroutine heraus
wegoptimiert.  Vielleicht ist das ja bei IAR ähnlich?

Autor: focus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm ja das mit dem falschen forum ist peinlich =)
zum aussehen gibt es eigentlich nicht viel zu sagen.. es kommen die
ganze zeit komische daten, zwar immer die gleichen aber nicht die
erwarteten, an (a mit dächelchen) und die ändern sich auch nach einer
eingabe von der pcseite aus nicht... könnte schon ein von dir
beschriebenes problem sein.. . das mit dem volatile werde ich morgen
ausprobieren muss mir einen neuen controller besorgen. momentan lässt
sich das stk500 irgendwie nicht ansprechen (aus dem atmel assembler)
frag mich aber bitte nicht warum g heute geht echt alles daneben

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das falsche Zeichen könnte auch auf Paritätsprobleme hindeuten, oder
aber falsche Baudrate.  Letzteres kann Dir bei den ATmegas schnell
passieren, wenn Du einen externen Quarz dranbammelst, Deine
Baudratenberechnung darauf einrichtest -- und dann vergißt, den
RC-Oszillator per Fusebit außer Betrieb zu nehmen.

Autor: Marco -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
um nicht noch einen neune Beitrag zu erstellen, stelle ich mein Problem 
hier dazu. Ich hab ein Programm, welches ein Zeichen empfängt und es 
wieder zurücksendet. Dieses Programm läuft auch auf einem anderen µC nur 
bei mir leider nicht. Ich nutze das STK500 und den ATmega8515.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdlib.h>
#include <inttypes.h>


void USART_Init(uint8_t baud );
void USART_Transmit(uint8_t data);
unsigned char USART_Receive( void );



int main(void){

  cli();
  USART_Init(12);
  sei();  

  while(1){
  USART_Transmit(USART_Receive( ));
  }

  return 0;
}

void USART_Init(uint8_t baud )
{
  UBRRH = (unsigned char)(baud>>8);          /* define baudrate */
  UBRRL = (unsigned char)baud;
  UCSRB = (1<<RXEN)|(1<<TXEN);            /* Transmit and Receive */
  UCSRB |= (1<<RXCIE);                /* Receive Interrupt enable */
  UCSRC = (1<<URSEL)|(3<<UCSZ0);            /* 8bit Mode /1 stop bit */
}

void USART_Transmit(uint8_t data)
{
  while ( !( UCSRA & (1<<UDRE)) )            /* wait, till buffer is empty */
    ;
  UDR = data;  
}                  /* write data into buffer */

unsigned char USART_Receive( void )
{
  /* Wait for data to be received */
  while ( !(UCSRA & (1<<RXC)) )
  ;
  /* Get and return received data from buffer */
  return UDR;
}


Ich nutze den internen Takt von 4 MHz, der richtige Controller ist auch 
ausgewählt, RS232 Spare ist mit Port D verbunden, Fusebit SUT_CKSEL 
steht auch auf 4 MHz aber leider funktioniert nichts. Ich habe mir auch 
schon verschiedene Beiträge hier durchgelesen, habe verschieden 
Programme von der Atmelseite probiert aber es bringt nichts. Hat einer 
eine Idee??
Danke im Voraus!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klassiker: Interrupt aktiviert ohne Interruptroutine

  UCSRB |= (1<<RXCIE);                /* Receive Interrupt enable */

>Ich nutze den internen Takt von 4 MHz

Für serielle Übertragung? Vergiss es. Kauf dir nen Quarz.

Autor: Marco -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieses Programm ist nur ein Teil von einem anderen und deshalb sind sie 
aktiviert. Ich habe jetzt den Takt auf 1 MHz verringert aber es 
funktioniert immer noch nichts.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Marco G. schrieb:
> bei mir leider nicht. Ich nutze das STK500 und den ATmega8515.
Schön für Dich. ;-)

> Ich nutze den internen Takt von 4 MHz, der richtige Controller ist auch
> ausgewählt, RS232 Spare ist mit Port D verbunden, Fusebit SUT_CKSEL
> steht auch auf 4 MHz aber leider funktioniert nichts. Ich habe mir auch
> schon verschiedene Beiträge hier durchgelesen, habe verschieden
> Programme von der Atmelseite probiert aber es bringt nichts. Hat einer
> eine Idee??

Zum Takt wurde schon was gesagt.

"Es funktioniert nichts" ist eine so typische Fehlerbeschreibung, daß Du 
vermutlich wenig Hilfe bekommen wirst...

Geht das Echo im Terminalprogramm, wenn Du RxD mit TxD an RS232-Spare 
direkt brückst (Verbindung zum Port natürlich abziehen).

Wenn nicht -> serielles Kabel und Terminalprogramm in Ordnung bringen.

Geht das Echo wenn Du den Prozessor draußen hast und RxD mit TxD direkt 
an der AVR-Fassung brückst?

Wenn nicht -> Verbindungen zwischen RS232-Spare und Port falsch.

Kommen Zeichen im Terminal an, wenn Du nur endlos ein Zeichen vom AVR 
sendest?

Gruß aus Berlin
Michael

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dieses Programm ist nur ein Teil von einem anderen und deshalb sind sie
>aktiviert.

Warum fragst du dann hier eigentlich? Sollen wir jetzt raten
wie dein Prgramm aussieht?

>Ich habe jetzt den Takt auf 1 MHz verringert aber es
>funktioniert immer noch nichts.

Klar, ändere deine Taktfrequenz wie es dir in den Sinn kommt.
Ist ja auch scheissegal welchen Wert UBRR hat.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

holger, sieh es nicht so eng, Glaskugeltraining muß auch sein und 
Stochern im Nebel ist doch für den Poster offenbar ausreichend.

Mich würde z.B. auch interessieren, wo der freigegebene 
Receive-Interrupt seiner Meinung nach hinspringen soll so ohne 
Interrupt-Routine.

Ist sicher nicht das einige chaotische...

Gruß aus Berlin
Michael

Autor: Marco -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir ja leid, dass ich kein Profi bin und ich sehe ein, dass mein 
Beitrag ohne die richtigen Infos war aber man kann es einem auch anders 
sagen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Tut mir ja leid, dass ich kein Profi bin und ich sehe ein, dass mein
>Beitrag ohne die richtigen Infos war aber man kann es einem auch anders
>sagen.

Wie denn bitteschön?

Die Antwort für Weicheier?

Lieber Marco, wenn du dir mal die Mühe machen
würdest das Datenblatt zu deinem uC zu lesen, dann würdest
du evtl. verstehen wie er funktioniert.  Falls du nicht
verstehst wie er funktioniert dann wirf bitte ein paar
Wattebällchen in meine Richtung. Wenn du mich an der Nase
triffst, dann hast du einen Wunsch frei ;)

Wüüürg!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Marco G. schrieb:
> Tut mir ja leid, dass ich kein Profi bin und ich sehe ein, dass mein
> Beitrag ohne die richtigen Infos war aber man kann es einem auch anders
> sagen.

Kann man, richtig. Ich kann aber damit leben, wenn man meine Antworten 
nicht mag.

Hast Du denn versucht, das Problem etwas einzugrenzen?
Meine Hinweise da waren durchaus ernst gemeint, die könnten uns beiden 
weiter helfen.

Gruß aus Berlin
Michael

Autor: Marco -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gerade dabei deine Punkte abzuarbeiten.
Mir gings ja nicht darum, dass ihr mein Problem löst sondern darum, ob 
mein Programm so funktioniert. Anscheinend liegts ja an den 
Einstellungen und/oder am Hyperterminal und darüm kümmere ich mich nun. 
Danke für deine Tipps

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.