- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 15

Thema: Programmstart mit Hindernissen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo,

    bin diesen Monat leider extrem beschäftigt - werde mir das nächsten Monat genauer anschauen.

    Als Workaround: Pack einfach mal die Initialisierung für ACS usw
    // ---------------------------------------
    // 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);
    nochmal vor die Pausen am Anfang also direkt vor die Ausgabe auf dem Display (Zeile 699),
    ggf. auch zweimal mit weiterer Pause dazwischen (200ms).
    Könnte dann funktionieren.

    MfG,
    SlyD

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von SlyD Beitrag anzeigen
    Als Workaround: Pack einfach mal die Initialisierung für ACS usw. nochmal vor die Pausen am Anfang also direkt vor die Ausgabe auf dem Display (Zeile 699),
    ggf. auch zweimal mit weiterer Pause dazwischen (200ms).
    Könnte dann funktionieren.

    MfG,
    SlyD
    Danke SlyD.
    Mal sehen, ob ich das hinkriege. Der RP6 ist mein erster Einstieg in C (bisher nur Bascom). Ich fang also ganz klein an!
    Das wird wohl spannend

    Gruß Uwe

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo Uwe,

    ah OK - naja ist keine große Sache: wirklich einfach nur den Text da oben in die genannte Zeile kopieren (der steht dann also zweimal im Programm getrennt durch die Pausen und Display ausgaben) und dann neu compilieren.

    Dann nochmal probieren.


    Ich habs noch nicht getestet daher ohne Garantie dass es was ändert.

    MfG,
    SlyD

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Ich hole dieses Thema noch mal hoch, weil ich gerade mal wieder drüber gestolpert bin. Aus meiner Sicht ist es immer noch nicht gelöst.
    Zitat Zitat von SlyD Beitrag anzeigen
    Als Workaround: Pack einfach mal die Initialisierung für ACS usw
    nochmal vor die Pausen am Anfang also direkt vor die Ausgabe auf dem Display (Zeile 699),
    ggf. auch zweimal mit weiterer Pause dazwischen (200ms).
    Könnte dann funktionieren.
    SlyD
    Das hab ich versucht, bringt leider gar nichts. Wundert mich aber auch nicht, weil ja nicht nur Move10 sondern auch Move9 nicht fehlerfrei vom WiFi-Loader starten, und Move9 arbeitet ja nicht mit ACS. Mit dem ACS hat das also nichts zu tun.
    Es muß irgendwie an der Startroutine beider Prozessoren über I2C liegen.

    Uwe

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo,

    es geht dabei auch nicht um das ACS - es geht darum irgendwas beliebiges über den I2C Bus zu senden weil das den Start auslöst (kannst auch an Adresse 0, daten 0 senden ist egal).
    Das normale Programm braucht am Anfang evtl. zu lange bis der Bus reagiert und dann kommt es eben zu den "slave antwortet nicht" 0x20 Fehlern oben.
    Also möglichst früh senden, dann eine lange Pause machen. Dann sollte es normal laufen.

    MfG,
    SlyD

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

    Jo, Geht!

    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);

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    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

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

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    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

Ähnliche Themen

  1. Ortung in einem Raum mit Hindernissen
    Von Checker108 im Forum Software, Algorithmen und KI
    Antworten: 14
    Letzter Beitrag: 14.03.2010, 13:59
  2. Hindernissen Ausweichen -> Fehlfunktion
    Von JeyBee im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 15.11.2008, 13: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, 21: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, 17:06
  5. LED-Darstellungs Idee mit ein paar Hindernissen
    Von Strahleman im Forum Elektronik
    Antworten: 51
    Letzter Beitrag: 24.01.2007, 15:20

Berechtigungen

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

Labornetzteil AliExpress