- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Programmstart mit Hindernissen

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131

    Jo, Geht!

    Anzeige

    E-Bike
    Hallo SlyD, nun geht es tatsächlich!
    Wie man hier unten im Code sieht, habe ich die Initialisierung des ACS, wie von dir vorgeschlagen noch 2x vor den "showScreenLCD" Befehl gepappt, jeweils mit einer Pause danach. 1x reichte NICHT! Mit 2x zusätzlich funktioniert es, aber es sieht echt seltsam aus.
    Das muß doch auch formschöner hinzukriegen sein!?
    Ich hab verschieden Versionen versucht, mit und ohne Pausen, verschiedene Pausenlängen usw. Bisher klappt es bei mir sicher nur so, wie hier zu sehen.
    Danke nochmals für den Hinweis.
    Vielleicht hat trotzdem jemand einen Tip, wie man das Problem generell löst. Dirk hatte ja oben bestätigt, das es zumindest auch beim Beispiel Move9 auftritt. Da müsste aber das Programm anders geändert werden (ACS ist ja nicht drin).
    Eine allgemeingültige "formschöne" Lösung wäre besser als dieses "Workaround", finde ich.

    Gruß Uwe

    Code:
    	setLEDs(0b1111);
    	
    	// ---eingefügt wegen Startup-Problem I2C---
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
    	// Enable Watchdog for Interrupt requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
    	// Enable timed watchdog requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
    
    	mSleep(200);
    
    	// Setup ACS power:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
    	// Enable Watchdog for Interrupt requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
    	// Enable timed watchdog requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
    	
    	mSleep(200)
    	// ---Ende Einfügung wegen Startup-Problem I2C---
    
    	showScreenLCD("################", "################");
    	mSleep(500);
    	showScreenLCD("I2C-Master", "Behaviours");
    	mSleep(1000);
    	setLEDs(0b0000);
    	
    	// ---------------------------------------
    	// Setup ACS power:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
    	// Enable Watchdog for Interrupt requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
    	// Enable timed watchdog requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Wie ich schon sagte ist es egal was gesendet wird. Beispielsweise sollte auch ein "I2C general call" funktionieren.

    Code:
        I2CTWI_transmitByte(0, 0);
        mSleep(200);
        I2CTWI_transmitByte(0, 0);

    MfG,
    SlyD

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von SlyD Beitrag anzeigen
    Wie ich schon sagte ist es egal was gesendet wird. Beispielsweise sollte auch ein "I2C general call" funktionieren.
    MfG,
    SlyD
    OK, das versuche ich heute abend mal!

    Danke, Uwe

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Genau genommen sollte es sogar so

    Code:
        mSleep(250);
        I2CTWI_transmitByte(0, 0);
    bereits funktionieren. Die Pause ggf. etwas länger machen.

    Noch zur Erläuterung:
    Das Problem ist einfach, dass der ältere Bootloader im Slave (RP6 Mainboard) nach dem Reset zu lange auf Kommunikation vom PC über USB wartet, in der Zeit aber nicht auf den I2C Bus achtet.
    Das M256 Modul kann das Programm wesentlich schneller starten wenn der Befehl vom PC kommt und dann bekommt der Slave Bootloader den Start nicht mit (könnte man ggf. sogar im RobotLoader künstlich etwas verzögern - müsste ich aber ausführlich testen und habe da aktuell leider noch weniger Zeit zu ).

    MfG,
    SlyD

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von SlyD Beitrag anzeigen
    Code:
        mSleep(250);
        I2CTWI_transmitByte(0, 0);
    Der Code oben hat tatsächlich gereicht, um Programm 10-Move2 sicher zu starten!

    Allerdings wollte das Programm 9-Move damit NICHT starten, auch nicht mit längerer Pause. Ich habe schließlich für beide Programme diesen Schnipsel versucht:
    Code:
    I2CTWI_transmitByte(0, 0);
    mSleep(200);
    I2CTWI_transmitByte(0, 0);
    Damit starten beide sicher!
    Problem gelöst, Danke!

    Uwe

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Ortung in einem Raum mit Hindernissen
    Von Checker108 im Forum Software, Algorithmen und KI
    Antworten: 14
    Letzter Beitrag: 14.03.2010, 14:59
  2. Hindernissen Ausweichen -> Fehlfunktion
    Von JeyBee im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 15.11.2008, 14:51
  3. Wo u. wie, Compilerstart, und Programmstart? (Windows-XP)
    Von mechat im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.08.2008, 22:18
  4. Gesicherte Daten im eram bei Programmstart verwenden
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 26.03.2008, 18:06
  5. LED-Darstellungs Idee mit ein paar Hindernissen
    Von Strahleman im Forum Elektronik
    Antworten: 51
    Letzter Beitrag: 24.01.2007, 16:20

Berechtigungen

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

12V Akku bauen