Peter II schrieb:
> der Atmel senden und empfängt 8bit also 0-255 - was dein Programm
> damit
> macht können wir schlecht wissen.
den hätte ich wohl auch posten sollen... Tut mir leid
Die Positionsroutinen für den Modellbauservo sind von meinem Prof und
die darf ich hier nicht veröffentlichen.
1 | #define F_CPU 4000000UL
|
2 | #define BAUD 125000UL
|
3 | #include <avr\io.h>
|
4 | #include <avr\interrupt.h>
|
5 |
|
6 |
|
7 | void init_timer1 (void);
|
8 | void init_UART (void);
|
9 | char uart_recv (void);
|
10 |
|
11 | typedef union
|
12 | {
|
13 | uint32_t myLong;
|
14 | uint8_t myChar[4];
|
15 | } data32bit;
|
16 | data32bit axPos;
|
17 |
|
18 |
|
19 | int main (void)
|
20 | {
|
21 | axPos.myChar[0]=uart_recv;
|
22 | axPos.myChar[1]=uart_recv;
|
23 | axPos.myChar[2]=uart_recv;
|
24 | axPos.myChar[3]=uart_recv;
|
25 |
|
26 | asm volatile ("SEI");
|
27 |
|
28 | while (1)
|
29 | {
|
30 | asm volatile ("NOP");
|
31 | }
|
32 |
|
33 |
|
34 | }
|
35 |
|
36 |
|
37 | void init_UART (void)
|
38 | {
|
39 | unsigned long UBRRVAL=((F_CPU/(16*BAUD))-1);
|
40 | UBRRH = (char)(UBRRVAL>>8);
|
41 | UBRRL = (char) UBRRVAL;
|
42 |
|
43 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
44 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<USBS);
|
45 | }
|
46 |
|
47 | char uart_recv (void)
|
48 | {
|
49 | while (!(UCSRA & (1<<RXC)))
|
50 | {
|
51 | }
|
52 | return UDR;
|
53 | }
|
Aber der Hauptzweck ist es, einen 32BIT Integer zu übertragen. Also mit
Union zerlegen und wieder zusammensetzen.
Warum ich überhaupt frage ist, ich kann die Steuerzeichen 0...32 nicht
senden und somit auch nicht genau simulieren ob es funktioniert.
Habe ich das richtig verstanden das es dem AVR egal ist ob er ein
Steuerzeichen bekommt?? Ergo empfängt er das Zeichen im UDR und das kann
ich dann auslesen
Danke nochmals