- 12V Akku mit 280 Ah bauen         
Seite 12 von 14 ErsteErste ... 21011121314 LetzteLetzte
Ergebnis 111 bis 120 von 137

Thema: Minimallösung: Kamera für den RP6

  1. #111
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Anzeige

    Powerstation Test
    Gut
    Naja ich werd mir dann mal die kamera besorgen und mal mitm oszi usw mir des anschauen vlt versteh ichs dann ja komplett (:

    Danke erstmal,
    DarkSoldier

  2. #112
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Hallo,

    nun muss ich dieses in die Jahre gekommene Thema auch mal ausgraben. Ich habe ebenfalls vor, eine SW-Kamera an den RP6 anzuschließen, damit er Linien verfolgen kann. Dazu habe ich mir folgende Platinenkamera besorgt: http://www.conrad.de/ce/de/product/1...-352-H-x-288-V

    Zunächst ist sie am ADC0 angeschlossen, ihre Stromversorgung ist VDD und wurde mit einem Widerstand versehen, um auf die 3V Betriebsspannung zu kommen. Das schwarze Kabel ist an GND angeschlossen. Ein einfaches Programm ließt die ADC-Werte und schreibt sie in den Terminal (Light-Detection Beispielprogramm auf andere ADC-Kanäle abgeändert). Dabei erhalte ich Werte von 350 +/-20 mV. Theoretisch sollte sich der Großteil der Werte verändern, wenn man die Kamera direkt ins Licht hält oder die Linse verdeckt, da die Sync-Signale ja nur sehr kurz andauern. Allerdings schwanken die Spannungen ohne erkennbares Muster in dem genannten Bereich. Beeinflussen kann man sie nicht.

    Daher erst einmal folgende Frage: Kann es sein dass meine Kamera defekt ist/ nicht dafür geeignet ist/ meine Überlegungen bezüglich der Beeinflussung der Werte völlig falsch sind?

    Andererseits wurde ja immer zum E_Int 1 als ADC geraten. Hierbei wüsste ich aber nicht, wie ich diesen Einlesen soll. Ist dafür ADCH zuständig?

    Einen schönen Abend!

  3. #113
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    So auf den ersten Blick scheint die Kamera geeignet, auch wenn sie leider nicht gerade billig ist.

    Bei einer Stromaufnahme (laut minimalem Datenblatt der Kamera) von ca. 40mA sollte der Vorwiderstand wohl ca. (5V-3V)/0,04A = 50 Ohm betragen. Größer wäre vielleicht sicherer, ein echter Spannungregler, eine Spannungsregelung mit Z-Diode oder zumindest ein Spannungsteiler scheint mir aber besser/genauer zu sein. Zusätzlich sollte auch das Signal der Kamera mit einem Widerstand (nominal ca. 75 Ohm, kann aber auch bis zu mehrere 100 Ohm sein) belastet werden.

    "Ein einfaches Programm ließt die ADC-Werte und schreibt sie in den Terminal" Das Programm solltest du uns zumindest mal zeigen. Der Mega32 hat nur einen analogen Wandler (=ADC) der ein 10-bitiges Ergebniss liefert. Mit diesem Wandler kann man aber verschiedene Eingänge (=Kanäle) wandeln, ob das der E-INT oder der ADC0 ist ist egal solange der verwendete Kanal im ADMUX-Register auch richtig ausgewählt ist. Das Ergebniss der Wandlung steht im ADC-Register welches sich aus ADCH (Bit 15-8) und ADCL (Bit 7-0) zusammensetzt. Es werden allerdings nur die Bits 9-0 verwendet. Das Videosignal sollte maximal (weiser Bildpunkt) ca. 1V betragen (je nach Belastungswiderstand kann es auch etwas mehr sein!)

    Als Referenzspannung verwendet man die interne 2,56V-Reverenz. Um das Kopieren des Ergebnisses aus dem 16bit ADC-Register etwas zu beschleunigen, und um Speicherplatz zu sparen, wird das Ergebniss im ADC-Register linksbündig dargestellt und nur das ADCH-Register gelesen.


    Ein kleiner Überblick:

    Hier werden 254 Werte eingelesen und zum Terminal gesendet:
    https://www.roboternetz.de/community...l=1#post457514

    Für ADC0 muss hier der Kanal geändert werden:
    // ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
    ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR) | 4; // 0 für ADC0

    Hier sieht man ein Sync (55-57), die Schwarzschultern (52-54 und 58-64) und ab Zeile 65 beginnt dann die Bildzeile:
    Code:
    51: 54 30 51 54
    52: 15 30 31 35
    53: 15 30 31 35
    54: 15 30 31 35
    55: 4 6 6 6
    56: 4 6 6 6
    57: 4 6 6 6
    58: 28 28 28 28
    59: 28 28 28 28
    60: 28 28 28 28
    61: 28 28 28 28
    62: 28 28 28 28
    63: 28 28 28 28
    64: 28 56 28 28
    65: 56 56 56 56
    66: 56 56 56 56
    67: 56 56 56 56
    68: 56 57 56 56
    69: 56 57 56 56
    70: 56 57 56 56
    71: 57 60 60 60
    ( Aus https://www.roboternetz.de/community...l=1#post457514)

    Die Syncwerte muss man eventuell an die Kamera anpassen:
    Code:
    	do{sync=0;while (ADCH > 20);while (ADCH < 30) sync++;}while (sync < 40);
    (ADCH > 20 bedeutet Bildzeile, ADCH < 30 ist ein Sync und mehr als 40 Syncs am Stück bedeutet der Start eines neuens Bildes)


    Das hier ist die letzte Variante des Programms. Es wird gewartet bis die jeweilige Wandlung beendet ist:
    https://www.roboternetz.de/community...l=1#post463226

    Der aktuelle Stand der Entwicklung ist die Verwendung des analogen Komperators zur Erkennung der Syncs:
    https://www.roboternetz.de/community...l=1#post519622
    (Leider beim RP6 nicht so einfach umsetzbar)

    Gruß

    mic
    Geändert von radbruch (04.02.2013 um 23:24 Uhr) Grund: Kosmetik
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #114
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Vielen Dank für die Antwort!

    Mich würde nur erst einmal interessieren, ob überhaupt etwas aus der Kamera herauskommt. Die Verpackung sah schon benutzt aus, darum vermute ich, dass sie schon einmal verwendet wurde. Könntest du vielleicht die 2 Zeilen posten, die benötigt werden, um E_INT als Eingang zu nutzen, damit ich die Werte im Terminal anzeigen kann? Das würde mir erstmal bedeutend weiter helfen.

  5. #115
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Der E_INT kann beim RP6 als Interupteingang für I2C genutzt werden und ist in der Library schon integriert. Diese Funktion kann man ausschalten, dabei wird der E_INT zu einem normalen Eingang:

    extIntOFF();

    So mache ich es auch in meinem Setup:

    Code:
    void ADC_Init(void)
    {
    	extIntOFF(); // schaltet den E_INT1-Port auf Eingang für den ADC
    
    // ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
    	ADMUX = (1<<REFS1) | (1<<REFS0)  | (1<<ADLAR) | 4;
    // setze free running triggern
    	SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    // kein Interupt, Wandler einschalten, prescaler /2, ADC läuft nun mit 4MHz!
    	ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1)  | (1<<ADPS0);
    // Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen
    	ADCSRA |= (1<<ADATE) | (1<<ADIF);
    // Initialisierung starten
    	ADCSRA |= (1<<ADSC);
    // und noch die empfohlene Initiallesung
    	while (!(ADCSRA & (1<<ADIF)));
    	ADCSRA |= (1<<ADIF);
    }
    (Aus https://www.roboternetz.de/community...l=1#post457514)

    Nach dem Initialisieren und dem Init des ADC steht dann immer der aktuelle Wert im ADCH-Register:

    Code:
    	initRobotBase();
    	ADC_Init();
    
    	while(1)
    	{
    		writeInteger(ADCH, 10);
    		writeString_P("\n");
    	}
    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!

  6. #116
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Etwas dergleichen habe ich bereits probiert. Nun habe ich noch einmal die beiden Codes von dir als Programm ausgeführt. Wie schon vorher werden ununterbrochen und scheinbar zufällig die Zahlen 1 und 3 ausgegeben. Dabei würde es sich ja um äußert niedrige Spannungen handeln. Interessanterweise ist es dabei egal, ob ich das Signalkabel der Kamera am E_INT angeschlossen habe oder nicht. Hast du eine Idee was ich falsch machen könnte?

  7. #117
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Möglicherweise ist doch die Kamera defekt. Richtigen E_INT-Pin verwendet? E_INT (INT1) ist über einen 10k-Widerstand (R34) mit GND verbunden, deshalb wird der Pin mit 0V gemessen, wenn nichts angschlossen ist. GND der Kamera ist mit GND vom RP6 verbunden? Was wird gemessen, wenn du eine 1,5V-Batterie zwischen GND und E_INT klemmst (bei 2,56V-Referenz bitte nicht mehr als 2,56V anschliessen!) Andere Signalquelle versuchen (TV, VCR, DVD, Playstation...).

    Ein einfaches Programm ließt die ADC-Werte und schreibt sie in den Terminal (Light-Detection Beispielprogramm auf andere ADC-Kanäle abgeändert). Dabei erhalte ich Werte von 350...
    Was wird gemessen wenn du den ADC= mit Vdd oder GND verbindest? Zeig mal bitte dein Programm.

    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!

  8. #118
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Guten Abend,

    verbinde ich eine Batterie mit + an E_INT und - an GND, so messe ich mit dem Programm Spannungen von 140, was ja völlig richtig ist. Daher dürfte das Programm auch korrekt laufen. Posten kann ich es zwar nicht, da der Laptop auf dem ich programmiere ab und zu nicht anzuschalten ist. Es handelt sich im großen und ganzen um das was du selbst gepostet hast.

    Gruß

  9. #119
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Tja, 140 bedeutet bei der linksbündigen Auswertung von ADCH ca. 1,4V, das liegt in plausiblen Bereich. Entweder ist die Kamera wirklich kaputt oder falsch angeschlossen oder die Spannungsversorgung mit dem Vorwiderstand (wie groß ist der denn?) funktioniert nicht wie erwartet.

    Kannst du als Gegenprobe die Kamera an einem Bildschirm anschließen?
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #120
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Als Vorwiderstand verwende ich 100 Ohm. Ich erhalte auch keine Spannungen, wenn ich mit einem Multimeter nachmesse. Ein Kabelbruch ist auszuschließen, da ich die 'Messsonde' auch direkt an die Lötstelle an der Platine halten kann und nichts passiert. Ich werde das gute Stück morgen einfach wieder abgeben, ist leider nicht das erste mal dass ich etwas defektes einkaufe.

    Bei Conrad finde ich ansonsten nur eine CMOS-Kamera für 30€. Du meintest, dass selbst die andere sehr teuer sei. Welche würdest du stattdessen empfehlen?

    Ansonsten dürfte morgen ein Arduino Leonardo eintreffen. Dieser könnte dann gegebenfalls mit seinen 16MHz die Kameraauswertung übernehmen und den RP6 entlasten.

Seite 12 von 14 ErsteErste ... 21011121314 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen