Forum: Mikrocontroller und Digitale Elektronik TLC 549 halber Wertebereich?


von Kai S. (Firma: keine) (kai86)


Lesenswert?

Hallo,...

Ich lese einen TLC549 mit einem ATMEGA88 aus, da ich die internen ADC 
Pins leider nicht frei zugänglich habe.

Nun zum Eigentlichen Problem ich bekomme anstelle von 000 bei 0V den 
Wert 128 also 2^7 angezeigt möchte den 8-bit A/D Wandler aber gerne auch 
als solchen nutzen!

der TLC549 hat Vref auf 5v,... CLK_io,CS,Data am µC,... ein POTI 
zwischen Analog in und GND angeschlossen.

Der C-Code ist rel. simpel und absichtlich aufgebläht gehalten:
1
value=0;
2
  
3
  PORTC=0xDF;  //CS auf low also auslesen
4
  PORTB=0xFD;
5
  if( ( PINB & ( 1 << PB0 )))  // MSB zuerst
6
    value+=128;
7
    
8
  PORTB=0xFF;
9
  wait(i);
10
  PORTB=0xFD;
11
  wait(i);

...usw bis...
1
  if( ( PINB & ( 1 << PB0 )))  // LSB
2
    value+=1;
3
4
  PORTB=0xFF;  // 8-ter Takt
5
  wait(i);
6
  PORTB=0xFD;
7
  wait(i);
8
9
  PORTB=0xFF;
10
  wait(i);
11
  PORTC=0xFF;  // CS auf high
12
  wait(i);


die Variable i entspricht in etwa der Anzahl an Wartetakten @ 8 MHz

also im Prinzip wie im Datenblatt von Texas-Instruments ich hab hier 
auch schon im Forum gesucht und rumgelesen hab aber keinen konkreten 
Hinweis hierzu gefunden,...


vielen Dank schon mal im Vorraus Gruß Kai

von tfliH nekneD (Gast)


Lesenswert?

- keine Pause nach CS low
- clock verkehrt herum
  (und somit auch die Pausen an der falschen Stelle)
- Poti zwischen Ain und GND, was? ;-)
- und der Code, **zensiert** 8-D

Wenns läuft ist die nächste Frage absehbar, wird daher
jetzt schon beantwortet:

Ja, Du siehst mit dem TLC549 immer ein sample in die Vergangenheit.


Gute Nacht

von Kai S. (Firma: keine) (kai86)


Lesenswert?

Hallo "Denken Hilft" (verkehrherum)

also ich habe den Poti natürlich zwischen Vcc, ain und GND angeschlossen 
;)

mit dem CLK verkehrt herum das fuchst mich jetzt!
Im Datenblatt steht bei Note B das der Wert des jew. Bits immer erst bei 
fallender Taktflanke anliegt...

ich werds trotzdem mal andersrum ausprobieren!!!



Die Pause nach CS=0 hatte ich mal ne Zeit lang drinnen aber hierbei ist 
der µC dann immer von 63 direkt auf 192 ohne Zwischenwert gesprungen 
also einen Sprung von genau 128 also 2^7 :( ansonsten stimmen die 
Zwischenwerte ja

Das mit dem vorherigen Sample wusst ich schon ;) (steht ja auch im 
DatenBlatt :)aber trotzdem mal Danke

der restliche Code geht hier halt genauso weiter halt bloß mit jew. 
value += 64,+=32,+=16,+=8,+=4,+=2 ich mein das wollte ich hier einigen 
der Übersicht halber ersparen :)

Gruß Kai

von Kai S. (Firma: keine) (kai86)


Lesenswert?

also ich habs nun mal mit wieder eingeführter Pause von ca 25µs nach 
CS_low und Abfrage nach positiven Taktflanken also andersrum ausprobiert 
mit dem selben Ergebniss wie sonst auch mit Pause nach CS_Low also 
Sprung von 63 auf 192 bzw Sprung von 00111111 auf 11000000

Mir ist es unklar wieso er das siebte bit mit hochzieht ich messe 
kontinuierlich in einer endlos schleife also am vorherigem Sample sollte 
es ja wohl nicht liegen ich warte hier nach jedem CS_Low ca. 200 zyklen 
@ 8 MHZ also ca 25µs eine Taktperidoe ist hier 50µs Breit das sollte ja 
passen,...

Gruß Kai

von Kai S. (Firma: keine) (kai86)


Lesenswert?

So habe das Problem am Schopf gepackt das Problem lag leider an der 
Code-Weg Optimierung der warte Schleifen durch den Compiler,...

also habe ich (in AVR Studio4) hier unter Project -> Configuration 
Options -> Optimization "-O1" eingestellt.

demnach ist mir der µC zuvor einfach am AD-Wandler vorbeigerast ;)
Sorry das die Antwort hier erst so spät kahm hatte leider wichtigeres um 
die Ohren aber vielleicht hilft das einem Ja :)

Grüße Kai

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.