Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
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: