-
-
Erfahrener Benutzer
Roboter-Spezialist
Jo hab ihm ne Mail geschrieben (Dem Besitzer des Shops von dem ich die Cam hab).
Also du denkst dass kein weiterer Ram nötig wäre? Weil damals bei den Threads zur Gameboy Cam gab es so massig viele Beiträge ihn denen die Rede von zu wenig Ram wäre, ist ja auch nur 4Kb beim M128.
Soll ich also den XRAM ganz weglassen?
Und ich hab das jetzt so verstanden:
Ein kurzer Impuls, vllt. 5µs lang, bei unter 0,3V beginnt die Zeile, dann kommen Schwarzschultern die ich übergehen kann. Dann werden die Daten gesendet, 0,3V sind schwarz, 1V sind weiß. Irgendwann nach ca. 60µs ist die Datensendezeit vorbei, das signalisiert mir ein wieder ca. 5µs langer Sync der schon der nächsten Zeile angehört, also folgen direkt auf diesen Sync wieder Daten. Irgendwann kommt ein längerer Sync (wie lang?) der Signalisiert dass das nächste Halbbild übertragen wird. Jetzt mal ne Skizze dazu damit ich nicht falsch verstehe was ein Halbbild ist:
Erst werden alle blauen Zeilen übertragen, dann alle Roten (Oder umgekehrt, geht ja nur ums Prinzip)?
ist das soweit richtig?
Geändert von Elektronik303 (02.09.2013 um 21:50 Uhr)
-
Moderator
Robotik Visionär
Jepp, du hast es.
Es wird dir vermutlich nicht gelingen zwischen Sync und Schwarzschulter zu unterscheiden, interpretiere einfach beides zusammen als Sync. Der Seitensync ist bei mir über 40 mal länger als der Zeilensync.
Ob du wirklich mehr Speicher benötigst wirst du selbst merken. Ich bin auch nur ein Cam-Newbee und hatte bescheidene 32*32 Bildchen gemacht, verteilt auf mehrere Halbbilder. Aber dann waren für mich andere Dinge interessant und ich habe die Cam eingelagert. Vielleicht gelingt dir ja mehr. Ich mache vermutlich selbst nochmal irgendwann einen neuen Anlauf...
Noch die Methode für höhere x-Auflösungen: Nach dem Zeilensync wartet man kurz und liest dann zweimal den ADC aus. Erster Wert ist Schrott, der Zweite ist gültig. So kann man zwar nur einen Punkt pro Zeile auslesen, aber die Auflösung ist dann der maximale Zählwert pro Zeile:
delay=123; // 123. Pixel einlesen
while(ADCH>20); // warten auf Anfang Syncimpuls
while(ADCH<30); // warten auf Ende Syncimpuls
while(delay--); // warten bis gewünschtes Pixel kommt
*speicherzeiger=ADCH; // Schrott wegwerfen
*speicherzeiger++=ADCH; // 123. Pixel einlesen
Den maximalen Wert ermittelt man indem man delay solange vergrößert bis der eingelesene Wert kleiner 0,3V ist, also der nächste Sync beginnt. Das hängt dann vom Takt des Kontrollers ab.
Viel Erfolg
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
-
Erfahrener Benutzer
Roboter-Spezialist
Ok, dann bin ich schon ein großes Stück weiter.
Und ich schlussfolgere jetzt einfach mal: Ich brauche kein LM1881, ich schliese die Cam direkt an ADC an, richtig?
Als ADC benutz ich dann den ADC0820, wie ich den anschliese kommt später, das blick ich bisher nämlich auch noch nich soganz, aber das ist was anderes.
Ich kann das Signal der Cam auch einfach (übern Cinch auf der einen Seite mit GND) mit dem Fernseher verbinden?
Mit dem Ram werd ich mal gucken, dazu auch noch ne Frage, macht es nen Geschwindigkeitsunterschied ob ich 32kb XRAM hab oder 64kb? Geht das dann deutlich langsamer drauf zuzugreifen oder ist das scheißegal wie viel XRAM ich nehme von dem Speed her?
Wenn die Cam da ist werde ich versuchen sie so zu programmieren dass sie auf einer Linie fahren kann, ich bin gespannt!
-
Moderator
Robotik Visionär
Hallo
Ja, die Cam direkt am ADC, eventuell noch ein Lastwiderstand gegen GND. (Bei mir waren es 10K) )Ich hatte parallel noch eine Cinch-Buchse angeschlossen und darüber ein Kontrollbild zum TV gesendet.
Warum ein externer ADC? Für den Anfang tuts der im Mega128 auch.
Mein RP6 hat mit 2KB-SRam die Linie erkannt, ich glaube nicht das mehr Speicher Vorteile bringt. Aber das hatte ich wohl schon erwähnt...
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
-
Erfahrener Benutzer
Roboter-Spezialist
Ja, erstmal kann mans ja auch so probieren, ich werd sehen sobald alles aufgebaut ist. Bis dahin erstmal vielen vielen Dank für deine Hilfe!
-
Erfahrener Benutzer
Roboter-Spezialist
RE:
So, ich hab was schönes gefunden, den PCF8591. Ein I²C IC mit 4 Channel ADC und 1 Channel DAC.
Im Datenblatt (http://www.selectronic.fr/includes_s...ps/PCF8591.pdf) steht dass die Wandlungsgeschwindigkeit vom Quarz abhängt, der kann maximal 1,25Mhz haben (So wie ich das in der Tabelle auf Seite 17 verstanden habe). Wie schnell führt der ADC dann eine Umwandlung durch (in µs)? Bzw. wie lange braucht es dass mein Mega128 den Wert dann auch weiß (Also einschließlich I²C Zeit)? So könnte man abwegen ob es sich lohnen würde den PCF8591 statt dem internen ADC zu nutzen.
Und auch habe ich noch eine Verständnissfrage zum ADC des AVR's. Im Wiki steht dass eine Geschwindigkeit bis 1000Khz möglich ist. Aber warum nicht mehr? Wenn ich 16Mhz habe, den Prescaler 8 verwende komme ich auf 2000000Hz das entspricht dann schon 2000Khz. Zwar ist es dann nicht sehr genau, aber doch das doppelte von 1000Khz. Warum steht dann im Wiki dass nur 1000Khz möglich sind?
-
Erfahrener Benutzer
Robotik Visionär
Beim externen RAM ist es egal wie viel man nimmt, solange man zwischen 512 bytes und 64 kBytes bleibt. Für mehr als 64 K müßte man wohl noch eine extra Bankumschatung nehmen.
Man kann den ADC takt auch höher als 1 Mhz wählen, aber dann ist mit deutlich größeren Fehlern zu rechnen. Bei 1 MHz ADC takt kann man noch etwa 8 Bit erwarten. Wenn man mehr nimmt, sollte man wenigstens auf einen Eingangswiderstand von unter 5 KOhm achten, denn die Sampling Periode wird ja mit verkürtzt.
Wenn schon ein externer AD Wandler, dann wohl gleich ein ADS820 oder was ähnliches. Mit etwas Glück sollte man den auch gleich an den Datenbus zum XRAM anschließen können.
-
Erfahrener Benutzer
Roboter-Spezialist
Ich hab jetzt bei Analog ein gefunden, http://pdf1.alldatasheet.com/datashe...AD/AD7822.html
mit Parallel Interface, wies funktioniert muss ich noch sehen, ist aber verdammt schnell das Teil, 420ns für eine Umwandlung, das sollte wohl reichen. Sieht das vernünftig und brauchbar aus? Ich kanns ja an jeden beliebigen Port anschliesen oder? Denn PC und PA brauch ich für den XRAM.
Und geht der AD7822 leicht anzusteuern oder ist das mit Bascom kaum zu schaffen?
-
Erfahrener Benutzer
Robotik Visionär
Das Auslesen eines paralleln ADC sollte an jedem port gehen. Es sollte nur ein ganzer Port sein, damit man die 8 Bits auch gleich zusammen hat.
Die Ansterung solle auch in Bascom gehen, aber um den Wandler voll auszunutzen baucht man wohl Assembler. Soweit ich weiß kann man ja auch in Bascom inline Assembler nutzen um die kleine Einleseschleife zu beschleunigen.
Als alternativer Wandler wäre auch ein ADS820 möglich, der ist recht gut zu bekommen. Den hatte ich oben eigentlich gemeint.
-
Erfahrener Benutzer
Roboter-Spezialist
wenn es nur um einen Linienfolger gehen soll, würde ich mir über die RAM-Größe überhaupt keine Gedanken machen. Es genügt, wenn man nur eine Zeile - sagen wir mal - knapp oberhalb der Bildmitte und ein knapp unterhalb der Mitte digitalisiert und abspeichert. Man bildet den Betrag der Differenz der beiden Zeilen und speichert diesen wieder im RAM ab (meinetwegen ab der Adresse der ersten Zeile. Nun sucht man das Maximum in der Differenzzeile. Dessen Adresse ist die Posiotion und damit die Lageabweichung der schwarzen oder weißen Linie.
Die Digitalisierung würde ich auch mit einem parallelem ADC machen. Damit wäre der µC weitgehendnd entlastet und der RAM-Verbrauch minimal.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen