Forum: Mikrocontroller und Digitale Elektronik SPI vom USART1 nutzen, Probleme durch USART0?


von etler (Gast)


Lesenswert?

Hallo,

ich bin noch bei der seriellen Ansteuerung eines DAC-ICs mit der USART1 
Schnittstelle meines Atmega324p. Die USART1 Schnittstelle habe ich dabei 
als SPI-Schnittstelle laufen, allerdings funktioniert so meine 
CLK-Leitung nicht, ich bekomme kein Signal raus.

Kann es daran liegen, dass ich meine USART0 Schnittstelle schon zur 
Kommunikation mit einem FTDI (USB- Wandler IC) laufen habe und er mir so 
den Zugriff vom USART1 auf den XCK1 verweigert? Es gibt ja nur einen XCK 
für 2 USARTs.

Hier mein Code...
1
void SPI_USART_Init()
2
{
3
  UBRR1 = 0;
4
  /* Setting the XCKn port pin as output, enables master mode. */
5
  
6
  DDRD |= (1 << PD4);
7
  //XCK1_DDR |= (1<<XCK1);
8
  /* Set MSPI mode of operation and SPI data mode 0. */
9
  UCSR1C = (1<<UMSEL11)|(1<<UMSEL10)|(0<<UCPHA1)|(0<<UCPOL1);
10
  /* Enable receiver and transmitter. */
11
  UCSR1B = (1<<RXEN1)|(1<<TXEN1);
12
  /* Set baud rate. */
13
  /* IMPORTANT: The Baud Rate must be set after the transmitter is enabled
14
  */
15
  UBRR1 = 6;
16
}
17
18
19
unsigned char SPI2_MasterTransfer (unsigned char c1,unsigned char c2)
20
{
21
  while (!(UCSR1A & (1<<UDRE1)));
22
  
23
  UCSR1A |= (1 << TXC1);
24
25
  UDR1 = c1;
26
  UDR1 = c2;
27
  
28
  //while (!(UCSR1A & (1<<RXC1)));  
29
30
  return UDR1;
31
}
32
33
//Aufruf
34
ReData = SPI_Transfer(110,110);

Vielen Dank

Achja, ich habe dies schon in einem alten Thread schon ähnlich 
behandelt, aber ohne Lösung 
(Beitrag "Uart als Spi macht Probleme")

Nun aber die neue Frage zum Zusammenhang mit dem FTDI und USART0.

von spess53 (Gast)


Lesenswert?

Hi

> Es gibt ja nur einen XCK für 2 USARTs.

Nein zwei. PB0-XCK0 und PD4-XCK1.

MfG Spess

von etler (Gast)


Lesenswert?

stimmt,
habe ich einfach übersehen

Dann liegt es ja nicht daran, dass USART0 mir den Zugriff verweigert. 
Was kann es sonst noch sein?

ist die Initialisierung als Master und mit Clk so richtig?
1
DDRD |= (1 << PD4);
2
//im Datenblatt XCK1_DDR |= (1<<XCK1);

von etler (Gast)


Lesenswert?

vielleicht noch dazu...
ich muss USART1 für SPI im synchronen Modus laufen lassen und will so 16 
bit raus schieben. Gleichzeitig soll mein ATmega als Master fungieren.

Die Spi-Enable-Leitung (Chip-Select) brauch ich dann ja nicht, oder?

von spess53 (Gast)


Lesenswert?

Hi

>Die Spi-Enable-Leitung (Chip-Select) brauch ich dann ja nicht, oder?

Das hängt vom Slave ab.

MfG Spess

von Helfer (Gast)


Lesenswert?

etler schrieb:

> Die Spi-Enable-Leitung (Chip-Select) brauch ich dann ja nicht, oder?

Ich habe vor einiger Zeit lange an einem nicht funktionierenden SPI 
debugged (atmega168, oder war's ein 328er?). Auf diesem AVR ist es 
zwingend nötig, /SS als Output zu konfigureren, sonst läuft SPI nicht 
richtig. Ist das beim 324er auch so?

von spess53 (Gast)


Lesenswert?

Hi

>Ist das beim 324er auch so?

Ja, beim SPI. Aber hier geht es um USART im SPI-Mode und da gibt es kein 
SS-Pin.

MfG Spess

von etler (Gast)


Lesenswert?

Mhm, ich werde mal einen anderen Controller nutzen, vielleicht ist der 
defekt. Kann ich aber erst morgen machen.

Oder noch jemand Ideen?

von etler (Gast)


Lesenswert?

Problem gelöst, Fehler im Layout und somit Pins falsch beschriftet -.-

neue Frage...
_________________________________________________________________

Nachdem ich über SPI gesendet habe, stoppt mein TX und mein CLK-Signal. 
Nun brauch ich aber noch zwei Clock-Flanken mehr. Dazu wollte ich das 
Clock Signal einfach manuell weiter toogeln. Allerdings passiert nichts, 
bzw er toogelt nicht. Bekomm ich direkt nach dem SPI senden keinen 
Zugriff auf den CLK-Pin (PD4) um ihn neu zu setzen? Muss man davor erst 
SPI wieder ausschalten?

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.