Hallo Forumnutzer,
mein erster Beitrag mit einer wahrscheinlich sehr einfachen Frage.
Im Anhang seht Ihr die Beschaltung für den USART im synchronen Modus.
Den USART des ATtiny2313 für den Master initialisiere ich wie folgt:
1 | #ifndef F_CPU
|
2 | #define F_CPU 1000000UL
|
3 | #endif
|
4 | #define BAUD 9600
|
5 | #define UBRR_VAL (F_CPU/(2*BAUD))-1
|
6 | #define RxD PD0
|
7 | #define TxD PD1
|
8 | #define XCK PD2
|
9 |
|
10 | /* Eingänge/Ausgänge definieren */
|
11 | DDRD=(0<<RxD)|(1<<TxD)|(1<<XCK); // Datenrichtungsregister D definieren
|
12 | /* USART initiailisieren */
|
13 | UBRRH=(uint8_t)UBRR_VAL>>8; // Baudrate (9600) einstellen
|
14 | UBRRL=(uint8_t)UBRR_VAL&0xFF; // Baudrate (9600) einstellen
|
15 | UCSRB=(1<<RXEN)|(1<<TXEN); // Receiver aktivieren, Transmitter aktivieren
|
16 | UCSRC=(1<<UMSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<UCPOL); // synchroner Modus, 2 Stop-Bits, 8 Bit-Zeichen, Polarität umkehren
|
Wie Ihr in der ersten Codezeile sehen könnt, ist XCK (PD2) als Ausgang
beschaltet. Beginnt der Controller dann sofort mit der Taktung an XCR
(=> er ist der Master)?
Bei den Slaves (andere AVRs) wird XCK einfach als Eingang definiert,
damit dieser einen Takt empfängt, richtig?
In der letzten Codezeile ist das UCPOL-Bit auf 1 gesetzt. Bei den Slaves
müssen doch dann theoretisch die UCPOL-Bits auf 0 gesetzt werden, oder?
Danke im Voraus!
Mit freundlichen Grüßen
PHBU