Ich habe mal ne Frage, wie ich den eingelesenen Int Wert vom AD Wandler,
auf der seriellen Schnittstelle abgebe
Wie funktioniert das mit dem String?
Hier mal mein Code:
#define F_CPU 3686400
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include <inttypes.h>
void USART_Init()
{
UBRRH = 0; /*9600 Baud */
UBRRL = 23;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); /* 8 Datenbits, kein
Parity Bit, ein Stoppbit */
}
void USART_Transmit()
{
while ( !( UCSRA & (1<<UDRE)) )
{
}
UDR = '8';
return 0;
}
void io()
{
int x;
DDRC = 0x00;
}
int main(void)
{
io();
USART_Init();
int x;
while(1)
{
ADCSR = 0b11000101;
while (bit_is_set(ADCSR,6));
x=ADCW;
USART_Transmit();
}
}
Gast
#1081815
So jedenfalls nicht ;)
-Du schreibst dir ne Funktion, die ein Zeichen übers UART ausgibt -Du schreibst ne Funktion, die einen String übergeben kriegt und ihn Zeichen für Zeichen an die erste Funktion übergibt -Du benutzt zb itoa, um deinen int in einen String zu wandeln. -Du sendest diesen String an die zweite Funktion
Danke,
probier das gerade mit:
int x(unsigned char c)
{
while ( !( UCSRA & (1<<UDRE)) ) /* warte, bis UDR bereit */
{
}
UDR = c; /* sende Zeichen */
return 0;
klappt nur irgendwie nicht...
Gast
#1081858
>klappt nur irgendwie nicht...
Schade...
DA muß man wohl noch etwas umformen. Z.B. Ein int nach char...
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 | |
Gast
#1081865
Umformen wäre ganz gut ;-)
1 | |
2 | |
3 | |
4 | |
Damit sollte aus dem int ein char geworden sein. Es kann auch gut sein, dass der buffer nur 7 Zeichen groß sein muss und bei itoa dann auch keine 10 hin muss, das habe ich grade so aus dem Kopf mal hingeschrieben. Die einzelnen Zeichen im Puffer musst du dann getrennt senden, also mit einer Schleife den Puffer durchgehen und senden. Wenn du mit deiner Methode sendest, funktioniert es auch mit Werten bis 256. Allerdings stehen diese dann nicht im Hyperterminal direkt als Zahl, sondern das Programm wandelt dann dein Zeichen in ein ASCII-Zeichen um (google mal nach einer ASCII-Tabelle, sende dann eine "108" und erfreue dich am auftauchenden Buchstaben) Quarzoszillator hast du dran? Mit dem internen Takt kann es (sehr wahrscheinlich) mit dem UART Probleme geben.
Hi, die Übertragung funktioniert, aber er sendet alle Zahlen direkt nacheinander...Wie kriege ich da Zeilenumbrüche rein?? \n geht ja nicht ;)
Gast
#1081885
> \n geht ja nicht
???
Warum sollte das nicht gehen ?
1 | |
Ok, geht doch... Aber wie kann ich das einbauen?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.