Re: Problem mit TLC549 Kategorie: Programmierung (von André H. - 31.07.2006 8:59) | ||
Als Antwort auf Re: Problem mit TLC549 von Marc Priggemeyer - 25.07.2006 20:48 | ||
| ||
Hallo Marc, So, ich hatte jetzt Gelegenheit selbst mit dem TL549 zu testen: Ich habe dabei eigene Routinen geschrieben, und habe beide Möglichkeiten beim Aufbau des Bytes beachtet: const CS =13; const CLK=14; const DTA=15; function getAD() returns byte {byte x,i; ports.set(CS,0); x=0; for i=0...7 { // x=x or (ports.get(DTA) and (0x80 shr i)); x=(x shl 1) - ports.get(DTA); ports.pulse(CLK); } ports.set(CS,1); return x; } byte AD; thread main { lcdext.init(); ports.set(CS,1); ports.set(CLK,0); loop { lcdext.line(1); AD=getAD(); lcdext.zahl4(AD); lcdext.line(2); lcdext.zahl4n2((AD*100)/51); lcdext.put('V'); } } Allerdings kam es nach einer Zeit zu einer unregelmä�igen Bitverschiebung. Die Ursache war aber ganz einfach: Wackelkontakt an der CS-Leitung ;-) Ich hatte das IC auf einem Steckbrett fliegend aufgebaut. Nach mehrmaligen rein-und rausziehen der Leitungen, besonders CS, läuft es nun einwandfrei. Also prüfe, falls bei Dir der Aufbau ebenfalls fliegend sein sollte, alle Steckverbindungen. > Hm. So hab ich es vorher auch schon probiert. Allerdings auch mit nem schlechten Ergebnis. > Wäre ja theoretisch möglich das die beiden vorletzten Zeilen Code > > ports.pulse(CLK); > ports.set(CS,0b1); > > die Probleme machen, wenn die C-Control nach dem pulse von CLK einen anderen Thread abarbeitet > (Ich hab zwar selbst keinen festgelegt, aber da gibts bestimmt irgendwelche Systemfunktionen oder > Interrupts). > Würde es vlt. helfen hier die Priorität auf die höchste zu Stellen und alle Interrupts (au�er reset) > zu deaktivieren? Nein, solange keine anderen Threads auf dieselben (Bit-)Ports zugreifen, kann hier auch nichts reinfunken. Und Interrupts erst recht nicht. (Eine Ausnahme wären SWCOM/TWB an den entsprechenden Ports, wenn man diese unmöglicherweise ;-) doppelt belegen würde.) > > Aber eine ganz blöde Frage: > > Warum nimmst Du nicht einfach den AD-Wandler der CC2 ? > > Sind alle AD-Eingänge schon belegt, oder brauchst Du eine andere Referenzspannung? > > Ich brauch eine höhere Wandlungsgeschwindigkeit von analog zu digital. Ich hab hier > ein CCD-Modul aus ner Gameboy-Camera, das ich gerne Abfragen möchte. Dann bist Du mit dem internen AD-Wandler eigentlich besser bedient. Das OS macht allerdings eine Mittelwertbildung aus mehreren Messungen, was natürlich etwas mehr Zeit benötigt. Mit einer kleinen ASM-Routine kann man eine einfache Messung durchführen: $segmented $model(medium) $extend $nomod166 $stdnames(reg164ci.def) $NOLOCALS OSsegment EQU 0 POP_R4 EQU 0765AH ;uses: R4, R12, R13, R14 PUSH_R12 EQU 075D6H ;uses: R1, R2, R12, R13,R14,R15 userseg SECTION CODE word at 30000h assume dpp3:userseg getAD0 proc far EXTS #0, #1 MOV ADCON, #00080h ;Start Conversion CH0 _ADrdy: JB ADBSY, _ADrdy ;wait Ready EXTS #0, #1 MOV R12, 0FEA0h ;ADDAT AND R12, #003FFh CALLS OSsegment,PUSH_R12 POP R1 POP R1 RETS getAD0 endp userseg ENDS END Der Aufruf aus C2 wäre dann folgender: inline function getAD0() returns int { inline vmcodes.VM_INLINE_SYSCALL+0x300; //Segment 3 inline 0; //Adresse 0 } ... wert=getAD0(); > Wäre aber vlt. auch sinnvoll dafür eine Steuerungselektronik aufzubauen, welche dann die Pixel- > Daten der Kamera abfragt, Funktionen zum sezten der Einstellungen des CCD bereitstellt und quasi > als Schnittstelle zwischen CC2 und CCD fungiert. Dann könnte ich die C-Control zur Verwaltung der > Bilder einsetzen. Ich möchte nämlich gerne mehrere Kameras (min. 6)verwalten. > Hast du da vlt. irgendwelche Vorschläge? Das externe Aufbereiten der Bilder bei mehreren Quellen ist sicher sinnvoll. Allerdings kenne ich mich mit Kamerageschichten nicht aus. Zur Datenübergabe an die CC2 gäge es aber mehrere Möglichkeiten. Zu favorisieren wären hier I²C und SPI. Routinen für SPI sollten dann aus Geschwindigkeitsgründen in ASM geschrieben werden, da man dann den Takt im MHz-Bereich fahren kann. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |