Elektronik Projekt
RSS Feed Selector Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Elektronik Projekt » Mikrocontroller » Atmel AVR RISC » [AVR-GCC] XPlain - Empfange Müll am USART » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen XPlain - Empfange Müll am USART
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
TecDroiD TecDroiD ist männlich
Moderator


images/avatars/avatar-161.jpg

Dabei seit: 12.08.2003
Beiträge: 2.456
Herkunft: Berlin

XPlain - Empfange Müll am USART Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aaalso ich nutze in einem Testprogramm den USART der am USB-Port hängt und habe testweise ein einfaches Echo programmiert...
Leider kommt nur Müll an. Einige Buchstaben stimmen, andere Zeichen sind außerhalb dessen, was Putty darstellen kann..

meine usart-funktionen sehen so aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
/*
 * usart.h
 *
 *  Created on: 08.03.2010
 *      Author: tecdroid
 */

#ifndef USART_H_
#define USART_H_
#include <avr/io.h>
#include <avr/iox128a1.h>

void usart_init () {
	/* This PORT setting is only valid to USARTC0 if other USARTs is used a
	 * different PORT and/or pins is used. */
	/* PIN3 (TXD0) as output. */
	PORTC.DIRSET = PIN3_bm;

	/* PC2 (RXD0) as input. */
	PORTC.DIRCLR = PIN2_bm;

	// enable tx rx double clock
	USARTC0.CTRLB = USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm;

	// asynchronous, char size is 8 bit, no parity, one stop bit
	USARTC0.CTRLC = USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc;
}

void usart_setRecvInt (uint8_t enable) {
	if (enable) {
		USARTC0.CTRLA |= USART_RXCINTLVL_HI_gc;
	} else {
		USARTC0.CTRLA &= ~(USART_RXCINTLVL_HI_gc);
	}
}

void usart_setSpeed (uint32_t speed) {
	uint8_t bsel = (F_CPU / (8 * speed)-1);
	USARTC0.BAUDCTRLA = bsel & 0xff;
	USARTC0.BAUDCTRLB = (USARTC0.BAUDCTRLB & 0xf0) + ((bsel >> 8) & 0x0f);
}

uint8_t usart_canSend () {
	return USARTC0.STATUS & USART_TXCIF_bm;
}

void usart_sendByte(uint8_t byte) {
	USARTC0.DATA = byte;
}

void usart_sendData (uint8_t *data, uint16_t count) {
	uint16_t i;
	for (i = 0; i < count; i++) {
		while (!usart_canSend()) ;
		usart_sendByte(data[i]);
	}
}

uint8_t usart_hasByte () {
	return USARTC0.STATUS & USART_RXCIF_bm;
}
uint8_t usart_getByte () {
	return USARTC0.DATA;
}

void usart_getData (uint8_t *data, uint16_t count) {
	uint16_t i;
	for (i = 0; i < count; i++) {
		while (!usart_hasByte()) ;
			data[i] = usart_getByte();
	}
}
#endif /* USART_H_ */



und mein hauptprogramm:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
/*
 * main.c
 *
 *  Created on: 17.03.2010
 *      Author: tecdroid
 */

#include <avr/io.h>
#include <avr/iox128a1.h>

#include "usart.h"

void sync_osc() {
	/*Oscillator auf 32Mhz einstellen*/
	OSC.CTRL |= OSC_RC32MEN_bm;
	/*Wenn Oscillator stabil wird das Flag RC32MRDY
	 * gesetzt und 32Mhz können benutzt werden*/
	while (!(OSC.STATUS & OSC_RC32MRDY_bm)) {
	}

	/*I/O Protection*/
	CCP = CCP_IOREG_gc;
	/*Clock auf 32Mhz einstellen*/
	CLK.CTRL = CLK_SCLKSEL_RC32M_gc;

	/* auto kalibierung ein */
	DFLLRC32M.CTRL = DFLL_ENABLE_bm;
}


int main(int argc, char **argv) {
	/*
	 * initializations
	 */
	sync_osc();
	usart_init();
	usart_setSpeed(9600);

	uint8_t byte;
	/*
	 * endles loop for running cpu
	 */
	while (1) {
		if (usart_hasByte()) {
			byte = usart_getByte();
			usart_sendByte(byte);
		}
	}
	return 0;
}


kann mir jemand erklären, was da schief läuft?

korrekt werden /auch zuverlässig!) die buchstaben tuvwdefg (und deren Großbuchstaben) gesendet. alles Andere ergibt Müll..

__________________
^[:wq
Sorry, eigentlich wollte ich mich kurz fassen.
Wer meine Ideen kommerziell nutzen möchte, möge mich bitte beteiligen- ich spare auf ein Haus großes Grinsen
23.03.2010 12:37 TecDroiD ist offline E-Mail an TecDroiD senden Homepage von TecDroiD Beiträge von TecDroiD suchen Nehmen Sie TecDroiD in Ihre Freundesliste auf Fügen Sie TecDroiD in Ihre Kontaktliste ein
a957m a957m ist männlich
Mitglied


Dabei seit: 20.06.2007
Beiträge: 48

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

in Deinem Programm ist mir so auf die schnelle nichts verdächtiges aufgefallen.

Was mir schon bei UART Problemen geholfen hat, ist das Sendesignal mit dem Oszi zu messen. So kann man feststellen, ob die Sendefrequenz, sprich die Baudrate, dem entspricht, was man glaub eingestellt zu haben.

Senden des Zeichens 'U' (hex 55) ergibt bei einem Stop-Bit ein Rechtecksignal, dessen Freuenz der halben Baudrate entspricht.
24.03.2010 12:46 a957m ist offline E-Mail an a957m senden Beiträge von a957m suchen Nehmen Sie a957m in Ihre Freundesliste auf
Malibann Malibann ist männlich
Foren Gott


images/avatars/avatar-25.gif

Dabei seit: 18.09.2004
Beiträge: 4.628

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Jep und ein ganz bößer Fehler ( meist bei selbstgebauten Kabeln ):

Fehlende Masse
oder
Masse mit signalleitung vertauscht.

__________________
Mit freundlichen Grüßen Malibann
(falls ich es mal wieder vergessen habe)
24.03.2010 12:57 Malibann ist offline E-Mail an Malibann senden Homepage von Malibann Beiträge von Malibann suchen Nehmen Sie Malibann in Ihre Freundesliste auf
TecDroiD TecDroiD ist männlich
Moderator


images/avatars/avatar-161.jpg

Dabei seit: 12.08.2003
Beiträge: 2.456
Herkunft: Berlin

Themenstarter Thema begonnen von TecDroiD
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Gott, ich hoffe, die haben diesen Fehler nicht auf dem XPlain gemacht Kawai

Ja, ich komm nur gerade schlecht zum Messen.
Irgendwann stell ich mir mal nen Koffer zusammen mit Netbook, Programmer, Steckbrett USB-Oszi Multimeter und variabler Spannungsversorgung..

Das wär doch mal was..

btt: wie oder wo kann ich das dann am xplain messen?

__________________
^[:wq
Sorry, eigentlich wollte ich mich kurz fassen.
Wer meine Ideen kommerziell nutzen möchte, möge mich bitte beteiligen- ich spare auf ein Haus großes Grinsen
25.03.2010 08:14 TecDroiD ist offline E-Mail an TecDroiD senden Homepage von TecDroiD Beiträge von TecDroiD suchen Nehmen Sie TecDroiD in Ihre Freundesliste auf Fügen Sie TecDroiD in Ihre Kontaktliste ein
Horst_h
Haudegen


Dabei seit: 16.03.2008
Beiträge: 503
Herkunft: Nds

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

aus der ASCII Tabelle>:
Hex Werte $ => ASCII
$44..$47 =>E..G
$54..$57 =>T..W
$64..$67 =>e..g
$74..$77 =>t..w
Sollte das nicht irgendwie stutzig machen?
Es werden nur $4..$7 erkannt oder anders nur die 4-Bit Folge 0b01XX

Grusz Horst
25.03.2010 10:37 Horst_h ist offline E-Mail an Horst_h senden Beiträge von Horst_h suchen Nehmen Sie Horst_h in Ihre Freundesliste auf
TecDroiD TecDroiD ist männlich
Moderator


images/avatars/avatar-161.jpg

Dabei seit: 12.08.2003
Beiträge: 2.456
Herkunft: Berlin

Themenstarter Thema begonnen von TecDroiD
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ja, das hab ich so noch gar nicht betrachtet.
ich muss mir mal einen anderen client suchen, auf dem ich auch hex-werte sehen kann.. ich vielleicht sende/empfange ich einfach die falsche Anzahl bits?

__________________
^[:wq
Sorry, eigentlich wollte ich mich kurz fassen.
Wer meine Ideen kommerziell nutzen möchte, möge mich bitte beteiligen- ich spare auf ein Haus großes Grinsen
25.03.2010 16:14 TecDroiD ist offline E-Mail an TecDroiD senden Homepage von TecDroiD Beiträge von TecDroiD suchen Nehmen Sie TecDroiD in Ihre Freundesliste auf Fügen Sie TecDroiD in Ihre Kontaktliste ein
TecDroiD TecDroiD ist männlich
Moderator


images/avatars/avatar-161.jpg

Dabei seit: 12.08.2003
Beiträge: 2.456
Herkunft: Berlin

Themenstarter Thema begonnen von TecDroiD
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

jetzt wirds noch mal spannend.
ich habe mal das kleine alphabet eingetippt und mir die hex vals angeschaut:
7D 7E 7F 64 65 66 67 EC ED EE EF EC ED ED EE EF 7C 7D 7E 7F 74 75 76 77 7C 7D 7E FF

Das große Alphabet sieht so aus
7D 7E 7F 44 45 46 47 CC CD CE CF CC CD CE CF 5C 5D 5E 5F 54 55 56 57 5C 5D 5E

lustig ist, wenn ich das empfangene Byte auf port e ausgebe, leuchten die meiste Zeit LED 0 und 1, der Rest flackert nur gelegentlich

__________________
^[:wq
Sorry, eigentlich wollte ich mich kurz fassen.
Wer meine Ideen kommerziell nutzen möchte, möge mich bitte beteiligen- ich spare auf ein Haus großes Grinsen
25.03.2010 22:08 TecDroiD ist offline E-Mail an TecDroiD senden Homepage von TecDroiD Beiträge von TecDroiD suchen Nehmen Sie TecDroiD in Ihre Freundesliste auf Fügen Sie TecDroiD in Ihre Kontaktliste ein
Horst_h
Haudegen


Dabei seit: 16.03.2008
Beiträge: 503
Herkunft: Nds

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

probiere doch einmal nur die Zeichen von char(32) bis char(96) auszugeben und zu empfangen.
Wer weiß. wie die Steuerzeichen von 0(Break) ..27(ESCape)..31 vom Empfänger interpretiert werden.
Oder war das gerade Dein Versuch?

Gruß Horst
25.03.2010 22:25 Horst_h ist offline E-Mail an Horst_h senden Beiträge von Horst_h suchen Nehmen Sie Horst_h in Ihre Freundesliste auf
Malibann Malibann ist männlich
Foren Gott


images/avatars/avatar-25.gif

Dabei seit: 18.09.2004
Beiträge: 4.628

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nochwas, laut deiner Beschreib ung testest du nur mit Echo.

Das heißt du weiß nicht ob die zeichen falsch Empfangen oder falsch gesendet wurden ...


Nun ich denke du solltest statt eines Echos eine Art "Hello World" auf dem XPlain schreiben.

Also wirklich so was wie
printf("hello Worl");

Und dann als Test nicht irgendwelche ASCII Zeichen sondern Zeichen der Bits du genau kennst:
printf(0x55,0x55,0x55,0x55);
printf(0xAA,0xAA,0xAA,0xAA);
printf(0x11,0x11,0x11,0x11);

Sehr gut sind auch druckbare Zeichen mit nur einem gesetzten Bit:
printf("@@@@"); // 4 x 0100 0000

Man kann dann ganz gut sehen ob nur die Empfangs oder Senderichtung vom Fehler betroffen isgt oder ob die Zeichen wenigstens immer gleich falsch ausgewertet werden.

__________________
Mit freundlichen Grüßen Malibann
(falls ich es mal wieder vergessen habe)
25.03.2010 23:36 Malibann ist offline E-Mail an Malibann senden Homepage von Malibann Beiträge von Malibann suchen Nehmen Sie Malibann in Ihre Freundesliste auf
TecDroiD TecDroiD ist männlich
Moderator


images/avatars/avatar-161.jpg

Dabei seit: 12.08.2003
Beiträge: 2.456
Herkunft: Berlin

Themenstarter Thema begonnen von TecDroiD
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

aalso warum auch immer, wenn ich den clk2 raus nehm, hab ich schon mal bessere werte- möglicherweise hab ich die falsche takt-rechnung..

__________________
^[:wq
Sorry, eigentlich wollte ich mich kurz fassen.
Wer meine Ideen kommerziell nutzen möchte, möge mich bitte beteiligen- ich spare auf ein Haus großes Grinsen
28.03.2010 12:28 TecDroiD ist offline E-Mail an TecDroiD senden Homepage von TecDroiD Beiträge von TecDroiD suchen Nehmen Sie TecDroiD in Ihre Freundesliste auf Fügen Sie TecDroiD in Ihre Kontaktliste ein
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Elektronik Projekt » Mikrocontroller » Atmel AVR RISC » [AVR-GCC] XPlain - Empfange Müll am USART

Impressum