- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 33

Thema: Pro-Bot 128 mit Bascom

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Anzeige

    Praxistest und DIY Projekte
    Nun ich dachte mir es wäre praktisch das zählen der Encoder auszschalten
    für das fahren bestimmter Strecken und so zählt er nur wenn Encoderenable 1 ist. Encleft und Encright zählen die einzeilnen impulse. das mit dem asuro muss ich mir genauer ansehen aber vielen dank
    MfG Martinius

  2. #22
    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

    In der Beschreibung des asuro wird es so erklärt:
    9.2.11. void OdometrieData(unsigned int *data)
    Die Refl exlichtschranke wird ausgewertet. Die Leuchtdioden (D13, D14) werden aktiviert und die
    A/D-Wandler-Werte der Fototransistoren (T11, T12) zurückgegeben. Wie in der Funktion LineData
    () muss ein Speicherbereich mit zwei Integerwerten übergeben werden, der dann von der
    Funktion gefüllt wird. Der erste Integerwert enthält den Wandler-Wert des linken (T11), der zweite
    Integerwert den des rechten Fototransistors (T12). Maximale Helligkeit entspricht einem Wert von
    ’0’ dunkel entspricht einem Wert von ’1023’ 5 . Die beiden Extremwerte werden normalerweise nicht
    erreicht, der Messwert bewegt sich irgendwo dazwischen.
    Beispiel:
    Auslesen der Refl exlichtschranke
    unsigned int data[2]; //Speicher bereitstellen
    .
    .
    OdometrieData(data);
    data[0] enthält den Wert vom linken Fototransistor (T11)
    data[1] enthält den Wert vom rechten Fototransistor (T12)
    Um Missverständnissen vorzubeugen: OdomertieData() liest nicht die Drehzahl direkt aus,
    sondern nur die aktuelle Helligkeit der Geberscheibe an der Lichtschranke. Eine Auswertung der
    Helligkeitswerte, ein Zählen der Hell-Dunkel-Übergänge und die Bestimmung der Drehzahl des
    Rades daraus bleibt dem Programmierer überlassen!
    Wie das beim probot und seinem CC-Pro umgesetzt wurde weiß ich nicht.

    Gruß

    mic

    https://www.roboternetz.de/phpBB2/ze...g.php?p=428214
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    das heißt also wenn ein signal über die interrupt leitung kommt muss ich das erst mit dem adc auswerten und dann speichern?
    MfG Martinius

  4. #24
    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

    Es wird überhaupt kein Interrupt ausgelöst werden, weil die Spannungspegel an den Eingängen nicht sicher auf low runtergehen. Wenn einer ausgelöst werden würde, müstest du nicht mehr den Spannungswert ermitteln ;)

    Normalerweise pollt man den ADC-Eingang und wartet, bis ein unterer Schwellwert unterschritten oder ein oberer Schwellwert überschritten wird. Dann erhöht man den Zähler und wartet auf den nächsten Schwellwertübergang.

    Wichtig ist eine gute Abschirmung und Ausrichtung der Sensoren, kein axiales Spiel am Codescheibenzahnrad, saubere (eventuell nachgeschwärzte) Codescheiben und nichteiernde Räder.

    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!

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Ich sehe grade das ich garkeine adc-Pins an die Encoder angeschlossen sind
    Int 6 und Int 7 hab keine zusatz funktion als ADC man muss also die Interrups zählen. So steht es auch im Buch:

    "Unsere Rad-encoder (Odometer, ähnlich wie der Kilometerzähler im Auto) arbeitet wie eine Reflexlichtschranke. die dioden D3 und D2(sender)
    leuchten die Taktscheiben des Antriebs an und die beiden Fototransitoren T3 und T4 (Empfänger) empfangen das reflektierete Signal imer dann, wenn ein weißes Feld auftaucht, und schalten dann auf masse durch. Die Fototransistoren arbeiten somit wie ein Schalter, der bei Licht geschlossen wird." Zitat Ende


    Hab ich jetzt dann mit meiner Grundsatzt idee recht gehabt oder hab ich da
    was ganz falsch mit gegrigt ?
    MfG Martinius

  6. #26
    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

    Du hast vollkommen recht, die Signale gehen gar nicht auf den ADC. Erstaunlich.

    Auf die Idee war ich zwar auch gekommen und hatte auch schon versucht die Pegel nur digital als high oder low zu erfassen. Beim asuro und meinem probot hatte es nicht funktioniert. Deshalb gehe ich davon aus, dass es auch mit dem Mega128 nicht funktionieren wird. Da hilft nur eins: Ausprobieren.

    Dass die Entwickler des asuro diese einfache Auswertung der Codescheiben nicht erkannt haben sollen scheint mir sehr unwahrscheinlich.

    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!

  7. #27
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Also ich hab jetzt mal ein Paar Änderungen am Programm getätigt:

    Code:
    Encoderleft Alias Pine.7
    Config Encoderleft = Input
    Encoderleft = 1
    
    Encoderright Alias Pine.6
    Config Encoderright = Input
    Encoderright = 1
    Hab jetzt mal die Encoder als Eingänge definiert um auf Nummer sicher zu gehen und den Pull Up-Wiederstand aktiviert.

    Code:
    Config Int7 = Low Level       'springen wenn Ground ist
    Config Int6 = Low Level       'springen wenn Ground ist
    Ich hab statt Falling mal Low Level genommen ich hatte zwar eigentlich
    gedacht dass das selbe ist da ja das Signal von High auf Low fällt aber
    bitte

    wenn ich irgentwas vergessen habe sagt es mir einfach ich werde mmorgen das dann mal genauer ausprobieren und dann die Ergebnisse posten den es ist sicher auch für den Asuro nützlich den es entlastet den Atmega, wenn er nur ein paar Interrups auslöst als wenn er dauernt das ADC abfrägt. Und danke nochmals Radbruch für deine Unterstüzung.
    MfG Martinius

  8. #28
    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

    Naja, wirklich geholfen habe ich bisher ja noch nicht.

    Ich bin immer noch verwirrt, weil ich nicht damit gerechnet hatte, dass die Odometry angeblich ohne ADC funktionieren soll. Ein Blick in die Beispielprogramme bestätigt es aber:

    Sollte Ihr PRO-BOT128 nicht Geradeausfahren, sondern sich nur im
    Kreis drehen oder die Wegstrecke nicht stimmen,
    müssen die Odometer-Sensoren (D2, T3 sowie T3, D4) justiert
    werden. Dies kann sich durchaus als "Gefummel" herausstellen!
    Die Bauteile D2, T3 sowie T3, D4 sollten dabei vorsichtig Richtung
    Encoderscheiben gedrückt werden. Als Encoderscheibe wurde in
    diesen Beispiel, die mit den vier schwarzen Flächen verwendet.
    Es hilft auch zudem die Encoderscheiben mit schwarzem Edding-Stift
    nachzuschwärzen. Hier ist ein wenig Fingerspitzengefühl und Ausdauer
    gefragt ;-) Zudem sollte es nicht zu hell sein, da die
    Foto-Transistoren bereits bei Sonnen-Einstrahlung durchsteuern.
    (Beschreibung des Autors in der Datei GO_Odometer.cc)

    Wenn T3 oder T4 durchsteuert, dann sollte am betreffenden Eingang ein Low anliegen. Wenn sie Sperren sollte es ein High sein. Laut Datenblatt des Mega128 (Seite 320, Anhang) sollte der Low-Pegel maximal 0,2V(!) sein, ab 0,6V wird sicher ein High erkannt. Der entsprechende ADC-Wert wäre dann 1023/5V*0,2V=41.

    Obwohl ich mich an minimale ADC-Werte um 150 erinnere sollte das nach dem Datenblatt des LPT80A durchaus möglich sein. Wieviel hell der LPT80A benötigt um wirklich auf die 150mV zu kommen kann ich aber nicht abschätzen.

    Ich bin echt neugierig ob dir das gelingen wird.

    Gruß

    mic
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken lpt80a-hellwerte.jpg   low-level-mega128.jpg  

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Es funktioniert (teilweise) die Impulse werden rechts bei der config falling gezählt aber , da liegt auch mein Problem links nicht die Encoderleitung liegt immer auf ground was soll ich tun ist der Encoder kaputt?
    MfG Martinius

  10. #30
    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

    Lötbrücke, Bauteile vertauscht, Bauteile beim Einlöten geschrottet, Auslöten und Pegel messen.. Es gibt viele Möglichkeiten.

    Das mit der digitalen Auswertung läßt mir keine Ruhe. Ich bin mir sicher, das habe ich mit meinem orginalen asuro getestet und es hatte nicht funktioniert. Nun habe ich das mit meinem probot umgesetzt (wegen der fortgeschrittenen Stunde nicht in Bascom) und tatsächlich, es scheint zu funktionieren:

    Code:
    #include "asuro-probot.h"
    #include "asuro-probot.c"
    
    unsigned int data[2];
    char c, pin_change=0;
    
    int count_l=0, count_r=0, status_l, status_r;
    
    int main(void)
    {
    	Init();
    	MotorSpeed(150, 150); 			// Antriebe starten und Beschleunigen
    	Msleep(1000);
    	StatusLED(RED);
    
    	OdometrieData(data); 			// Startwerte setzen
    	c=PINC;
    	status_l = c & 2;
    	status_r = c & 1;
    
    	while((count_l + count_r) < 100)
    	{
    		c=PINC; 							// Pinstatus einlesen
    
    		if(status_l != (c & 2)) 	// links?
    		{
        		status_l = c & 2;
         		count_l++;
         		pin_change += 2;
    		}
    
    		if(status_r != (c & 1)) 	// rechts?
    		{
         		status_r = c & 1;
         		count_r++;
         		pin_change += 1;
    		}
    		
    		if(pin_change != 0) 			// Bei Statuswechsel Werte zum Terminal senden
    		{
         		pin_change=0;
    			PrintInt(count_l);
    			SerWrite(" ", 1);
    			PrintInt(count_r);
    			SerWrite("\n\r", 2);
    		}
    	}
    	MotorSpeed(0,0);
    	StatusLED(GREEN);
    	while(1); // fertig
    	return 0;
    }
    Könnte das mal jemand mit einem orginalen asuro testen?

    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!

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress