Hallo,
wenn ich über USART Daten ausgeben möchte, empfange ich nur 0x80 oder
0x80 + 0x00.
Ich benutze das STK600 (habe über AVR Studio F_CPU auf 1MHz eingestellt
und das auch im Programm eingesellt). Baudrate benutze ich 19200 (auch
beim Empfangsterminal).
Egal was ich senden möchte, ich bekomme immer nur 0x80 oder 0x80 und
0x00 aufeinmal. Kann mir bitte jemand sagen, was ich falsch mache?
[/c]
void usart_send(uint8_t data)
{
// Warte bis Übertragungs-Puffer leer ist (letzte Übertragung fertig
ist)
while (!(UCSRA & (1<<UDRE)));
//Übergebene Daten in Data-Register geben (Daten übertragen)
UDR = data;
}
[/c]
1
intmain(void)
2
{
3
usart_init();
4
while(1)
5
{
6
usart_send(0xA0);
7
_delay_ms(1000);
8
}
9
}
Wenn ich jetzt das sende, erhalte ich 0b1100000 also vorne das erste Bit
ist falsch... Wenn ich 0x01 sende, erhalte ich 0b10000001
Start,Stop und Parity sind aber im Terminal richtig eingestellt.
Außerdem hab das Programm früher funktioniert.
Und der Schaltplan der verwendeten Schaltung?
Der Code ist aber auch nicht komplett. Hänge doch mal die ganze .c Datei
an bitte.
Da fehlt mindestens ein #define und ein #include.
Hallo,
sorry, hatte das Programm auf anderem Rechner, deshalb habe ich es nur
abgetippt. Hier jetzt der ganze code angehängt.
Das Problem besteht weiter: Sende ich 0b00000001 erhalte ich 0b10000001.
Sende ich aber 0b11111111 so erhalte ich auch 0b11111111. Also das MSB
ist immer 1.
Über AVR Studio habe ich die interne Frequenz auf 1 MHz eingestellt, auf
dem STK600 habe ich den Schalter für interne Frequenz auch
eingeschalten. PD0 und PD1 mit RXD und TXD verbunden. RS232 Verbinde ich
über einen RS232-USB Converter mit dem PC. Beim Terminal (hterm) habe
ich die gleichen Einstellungen wie im Programm (Baudrate 19200 , 8
Datenbits, 1 Stop kein Parity). Sonst noch jemand eine Idee?
GoZu schrieb:
> Das Problem besteht weiter: Sende ich 0b00000001 erhalte ich 0b10000001.> Sende ich aber 0b11111111 so erhalte ich auch 0b11111111. Also das MSB> ist immer 1.
Klassisches Symptom eines Bitratenfehlers. Die Bitrate vom Sender ist
geringfügig höher als die des Empfängers.
Mal dir das mal auf, dann wird das deutlich.
spess53 schrieb:
> Hi>>>>> Simon K. schrieb:>>> Und der Schaltplan der verwendeten Schaltung?>> STK600
Ahso, stimmt. Da ist ja auch ein Pegelwandler drauf.
Sorry.
Ok danke schonmal,
allerdings funktioniert das ganze auch nicht mit anderen Frequenzen.
Habe den Clock Generator auch auf 8 MHz, 16 MHz und 20 MHz eingestellt,
allerdings mit dem gleichen Ergebnis. Benötige ich dafür wirklich einen
Quarz?? Und wenn ja, wo stecke ich den dann genau beim STK600 rein? Beim
STK500 war alles gut beschrieben und es gab auch ein Manual, aber beim
STK600 gibts ja nur das interne von AVR Studio und dort ist das nicht
beschrieben und beschriftet ist es auch nicht auf dem board. Habe jetzt
ein Bild vom STK600 angehängt, dort wo der rote Kreis ist, muss ich dort
den Quarz reinstecken?
Wenn du bei den STK600-Einstellungen verschiedene Frequenzen eingestellt
hast, und sich nichts ändert, liegt es am Controller: Dessen Fuses
müssen auch für Verwendung einer externen Taktgenerators programmiert
sein.
Hi
> muss ich dort den Quarz reinstecken?
Steht doch in der Beschreibung:
The on-board crystal oscillator will work with ceramic resonators or
crystals between 4 and 24MHz (AT-cut, fundamental, and parallel resonant
crystals). Place a crystal in the crystal socket (located next to the
PROGRAM button).
Und den Umschalter nicht vergessen.
MfG Spess
Ok danke, es funktioniert. Aber könnt ihr mir bitte noch kurz etwas
erklären:
Ich kann ja zwischen Intern, Extern und XTAL wählen.
XTAL ist wenn ich einen eigenen Quarz benutze und den auf das STK stecke
oder?
Und was ist jetzt genau intern und was extern? Im Manual steht, dass
extern vom "Programmable clock generator". Ist dass das, wenn ich zum µC
connecte und dann bei den Spannungseinstellungen unten die Frequenz
angebe? Und vonwo kommt dann intern? Bei den Fuse bits kann ich intern
und extern auswählen und dort auch noch einmal die Frequenz
einstellen.... Ich bin gerade etwas verwirrt, könnt ihr mir das bitte
kurz erklären.
Außerdem habe ich hier Quarz-Oszillatoren mit 4 Anschlüssen, was sind
das für welche? Für das STK600 brauche ich doch welche mit 2 Anschlüsse
oder?
@ GoZu (Gast)
>Und was ist jetzt genau intern und was extern?
Intern: RC-Oszillator im AVR.
Extern: Separater Taktgenerator, welcher einen Takt in den AVR
einspeist.
>Außerdem habe ich hier Quarz-Oszillatoren mit 4 Anschlüssen, was sind>das für welche?
Das sind Quarzoszillatoren, also Quarz + Verstärker. Dort legt man Masse
und 5V an und es kommt ein Takt raus.
> Für das STK600 brauche ich doch welche mit 2 Anschlüsse>oder?
Keine Ahnung. Ein normaler Quarz braucht noch die Beschaltung, um zu
schwingen. Die ist im AVR eingebaut.
MFG
Falk
Hi
>Außerdem habe ich hier Quarz-Oszillatoren mit 4 Anschlüssen, was sind>das für welche? Für das STK600 brauche ich doch welche mit 2 Anschlüsse>oder?
Ja. Das STK600 hat einen Quarzgenerator, der mit dem eingesteckten Quarz
schwingt. Mit dem Umschalter wird das Taktsignal an XTAL1 vom Controller
gelegt.
In der Hilfe zum STK ist das alles sehr nett beschrieben.
MfG Spess
Dann wäre da noch der feine aber beim Fusen gern verwechselte
Unterschied zwischen dem externen Quarzsozillator und dem externen
Quarz.
Beim externen Quarz ist nämlich der Oszillator halb drin halb draussen.
Der aktive Teil ist intern, der passive (der Quarz und die
Kondensatoren) extern.