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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> 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: > <code> > 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'); > } > } > </code> > > 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 > > <code> > > ports.pulse(CLK); > > ports.set(CS,0b1); > > </code> > > 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: > <asm> > $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 > </asm> > Der Aufruf aus C2 wäre dann folgender: > <code>inline function getAD0() returns int > { > inline vmcodes.VM_INLINE_SYSCALL+0x300; //Segment 3 > inline 0; //Adresse 0 > } > ... > wert=getAD0(); > </code> > > > 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.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB