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
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?
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
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.
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.
UCSRB=(1<<RXEN)|(1<<TXEN);/* Transmit and Receive */
32
UCSRB|=(1<<RXCIE);/* Receive Interrupt enable */
33
UCSRC=(1<<URSEL)|(3<<UCSZ0);/* 8bit Mode /1 stop bit */
34
}
35
36
voidUSART_Transmit(uint8_tdata)
37
{
38
while(!(UCSRA&(1<<UDRE)))/* wait, till buffer is empty */
39
;
40
UDR=data;
41
}/* write data into buffer */
42
43
unsignedcharUSART_Receive(void)
44
{
45
/* Wait for data to be received */
46
while(!(UCSRA&(1<<RXC)))
47
;
48
/* Get and return received data from buffer */
49
returnUDR;
50
}
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!
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.
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.
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
>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.
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
>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!
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
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