Hallo
Da der Atmel AT89C51ED2 keinen AD Wandler hat, habe ich einen externen 8
Bit AD Wandler auf mein Board gelötet. Ich möchte die Daten über die SPI
Schnittstelle einlesen.
Folgendes Programm hab ich dazu geschrieben:
SPCON = 0xFA;
unsigned int test;
while(1)
{
test = 0x00; // Variable auf 0 setzen
P1_B0 = 0; // AD Wandler über CS aktivieren
SPDAT=0x00; // Daten über die SPI schicken, damit eine Frequenz
// erzeugt wird
while(SPIF == 1); // Warten bis Daten empfangen wurden
test = SPDAT; // Daten einlesen
printf ("Wert: %x\n", test); // Daten über Com1 ausgeben
P1_B0 = 1; // AD Wandler deaktivieren
}
Jetzt zu meinem Problem: Leider list dieses Programm nur nach einem
Reset den aktuellen Analogwert ein und gibt den dauerhaft über Com1 aus.
Das Programm soll den Analogwert dauerhaft einlesen und wenn ich ihn
verändere auch sofort ausgeben.
Wo ist mein Fehler??? Ich hoffe ihr könnt mir Helfen.
Gruß
Tim
Vielleicht benötigt der Wandler etwas mehr Zeit zwischen CS high und CS low. Kannst ja mal ein paar NOPs ans Ende der Schleife hängen bzw. ins Datenblatt gucken... Den Typ des ADCs hältst Du ja leider bislang geheim...
Ich benutze den AD Wandler TLC 549, 8 Bit. Ich habe schon versucht die Pause größer zu machen. Leider ohne Erfolg. Wie groß sollte die sein? Gruß Tim
17 Microsekunden, solltest Du mindestens warten. Außerdem sollte man mind. 1.4 us warten, bevor man nach der fallenden CS-Flanke den SPI-Takt startet. Guck' doch mal ins Datenblatt; wenn alle Stricke reißen, kannst Du das SPI auch sehr einfach selbst in Software machen und kannst das dann so langsam ablaufen lassen, dass Du es mit 'nem Multimeter verfolgen kannst... Viel Erfolg Johannes
Hallo Johannes danke für die Tips.
Der Code Funktioniert jetzt einwandfrei:
P1_B0 = 0; // AD WANDLER aktivieren
test = 0x00; // Variable auf 0 setzen
SPDAT=0xff; // Clock für die SPI ausgeben
while(SPSTA == 0x00); // Warten bis Byte empfangen wurde
P1_B0 = 1; // AD WANDLER deaktivieren
test = SPDAT; // Wert aus dem SPI Daten Register holen
CCAP1H = test; // Wert als PPV an PWM Modul 2 ausgeben
Gibt es eine möglichkeit den MOSI Port nicht zubenutzen?
Dieser Port ist bei mir doppelt belegt und ich bräuchte ihn als PWM
Ausgabe Port. Ist das möglich?
Gruß
Tim
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.