Anfänger schrieb:
> Andi D. schrieb:
>> aber was macht
>> deine uart_init
>
> die Funktion uart_init (...) berechnet wohl irgendwie anhand der
> eingestellten Baudrate und der Taktfrequenz des Mikrocontrollers einen
> Wert, um mit diesem Wert die Pulslänge der Signale einstellen zu können.
> Ist zB. die Taktfrequenz höher, dann muss der uC mehr interne Taktzyklen
> durchlaufen, als wenn er eine kleinere Taktfrequenz hätte, um auf die
> gewünschte Pulslänge des zu übertragenden Signals zu kommen. So ganz
> genau kann ich es Dir leider nicht erklären, dass kann vlt. jemand
> anders hier drinnen noch besser.
Ich bin mir fast sicher, dass Andi D. das alles weiß.
Aber: So wie alles, muss auch die UART konfiguriert werden. Da sind ein
paar Register mit Werten zu besetzen und auch dabei kann man Fehler
machen. Zb. den ganz banalen Fehler, dass man dem UART das Schreiben
nicht erlaubt hat, wodurch dann auch logischerweise am Schreibpin nichts
rauskommt.
Wenn du mit dem Oszi kontrollieren willst, dann mach das so:
1 | #ifndef F_CPU
|
2 | #define F_CPU 1000000UL
|
3 | #endif
|
4 |
|
5 | #include <stdlib.h>
|
6 | #include <avr/io.h>
|
7 | #include <avr/interrupt.h>
|
8 | #include <avr/pgmspace.h>
|
9 | #include <util/delay.h>
|
10 | #include <stdio.h>
|
11 | #include "uart.h"
|
12 |
|
13 |
|
14 | /* 9600 baud */
|
15 | #define UART_BAUD_RATE 9600
|
16 |
|
17 | int main(void)
|
18 | {
|
19 | uart_init (UART_BAUD_SELECT (UART_BAUD_RATE, F_CPU));
|
20 |
|
21 | sei ();
|
22 | while (1)
|
23 | {
|
24 | uart_putc ('1');
|
25 | } // Ende while
|
26 | } // end of main
|
Damit hast du 'Dauerfeuer' an der USART und das kannst du am Oszi kaum
übersehen. Wenn man etwas testen will, dann muss man den Test auch so
designed, dass man mit seinem Messmitel was sieht. Oder was denkst du:
wirst du eine paar Millisekunden lange Pulssequenz am Oszi sehen, wenn
sich die nur alle paar Sekunden mal wiederholt?