PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abfallzeit



Tpro
13.03.2012, 16:03
Hallo

ich möchte einen Digital-Analogwandler (Max541) per Spi am Atmega32 steuern. Für den Chip Select des DAC benutze PinB2. Das Problem ist das dieser Pin extrem langsam auf GND abfällt (ca 300µs) wärend alle anderen Signale vom SPI deutlich steiler sind. Damit funktioniert natürlich auch das Timing nicht...

Die Initalisierung von PB2 als Ausgang im Program:


DDRB = (1<<DDB2);

Funktionen für SPI


// konfigurieren des SPI
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
//auch SS mitals ausgang da er sonst hängen bleibt...
DDRB = (1<<DDB5)|(1<<DDB7)|(1<<DDB4);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);


}

// DAC
uint8_t spi_send_byte(uint8_t data)
{
/* Start transmission */
SPDR = data;


while(!(SPSR & (1<<SPIF)));
return 1;
}

uint8_t spi_DAC(uint16_t data)
{


union daten
{
uint16_t data;
struct
{
uint8_t byte1;
uint8_t byte2;
};

}dat;

dat.data=data;

//low -> DAC anwählen
PORTB &= ~(1 << PB2);

//senden des ersten bytes
SPDR = dat.byte1;
while(!(SPSR & (1<<SPIF)));

//senden des zweiten bytes
SPDR = dat.byte2;
while(!(SPSR & (1<<SPIF)));
//high -> DAC aktualisiern + abwählen
PORTB |= (1 << PB2);

return 1;
}


Kann mir jemand erklären wie diese Phänomen zustande kommt?

Kampi
13.03.2012, 23:02
Hi,

Der Chipselect ist nur mit dem Controller verbunden oder sind da noch andere Sachen dran angeschlossen?

Tpro
14.03.2012, 06:32
Hi,

genau. Da ist sonst nichts dran. Das Ganze ist mit einem Flachbandkabel und entsprechenden Buchsenleisten miteinander verbunden. Da aber auch die anderen SPI Leitungen (bei denen das Signal sehr gut ist) über dieses Kabel geführt werden kann ich mir nicht vorstellen das irgendwo zusätzliche Kapazitäten oder Induktivitäten vorhanden sind die das Signal verschleifen. Kann es sein das der PB2 nicht uneingeschränkt zu verwenden ist?

Grüße

Kampi
14.03.2012, 06:49
Hi,

es kann gut sein das die Pins für den SPI intern anders aufgebaut sind als der "normale" B2. Hast du mal im Datenblatt unter "Electrical Characteristics" geschaut bzw. nen anderen Pin ausprobiert?

Tpro
14.03.2012, 08:55
Das war das erste was ich gemacht habe... es gibt aber keine Hinweise darauf das PB2 sich irgendwie unterscheided. Auserdem verwende ich diesen PIN auch als normalen Pin. Das Chip Select für den DAC erfolgt per Software. Ich hatte das ganze vorher schon per Lochraster aufgebaut. Allerdings den PC7 anstelle des PB2 benutzt. Jetzt hab ich eine Platine gefertigt. Der einzigste Unterschied ist das ich jetzt PB2 verwende(aus Layout Gründen). Das es jetzt nicht so wie erhoft funktioniert ist schon ziemlich ärgerlich! Ich wüsste nur gerne warum damit ich (und vieleicht auch andere) nicht wieder in so eine Falle tappen.
Ich werde jetzt erstmal nen neuen ATmega bestellen und probieren ob dieser hier nicht defekt ist.

Danke erstmal für die Antworten!