- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: RP6Control M32: Projekt I2C-Slave

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Anzeige

    Praxistest und DIY Projekte
    Super! Dann klappt es ja!

    [Vielleicht hätte ich das noch mal im RN-Wissen Artikel im Slave-Abschnitt erwähnen sollen! ...habe ich gerade ergänzt!]
    Gruß
    Dirk

  2. #22
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    31
    Beiträge
    449
    Hallo Dirk,

    jetzt hab ich doch noch eine Frage zu deinem M32-Slave-Programm:

    Wie kann ich erkennen ob der letzte Befehl (z.B. Buchstabe aufs LCD schreiben) abgeschlossen ist? Weil ich kann inzwischen mit dem Raspberry Pi auf das LCD schreiben, habe aber das Problem, dass wenn ich einen String sende, die Buchstaben so schnell hintereinander gesendet werden, dass das Ganze nicht funktioniert (Es steht dann nur der letzte Buchstabe des Strings auf dem Display).

    Ich habe jetzt mal probehalber eine Wartezeit vom 20ms zwischen jedem Buchstaben eingebaut, und schon wird auch der ganze String angezeigt. Aber eine tolle Lösung ist das natürlich nicht...


    Leider habe ich deinen Code noch nicht ganz verstanden, und habe überhaupt ein bisschen Probleme mit den Handlern/Watchdogs/Timeouts etc..

    Viele Grüße,
    -schumi-

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo -schumi-,

    benutzt du für den Raspberry Pi auch die Lib "RP6M256_M32_I2CMasterLib" oder schreibst du direkt per I2C auf den Slave?
    Wenn du dir in der Lib die Funktion "void writeCharM32LCD(uint8_t ch)" ansiehst, dann wartet die am Ende mit "waitForM32TransmitComplete()" zumindest so lange, bis die I2C-Übertragung des Zeichens abgeschlossen ist. Bei mir war das ausreichend, um jedes Zeichen auf das LCD zu bekommen.
    Gruß
    Dirk

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    03.08.2012
    Beiträge
    5
    Servus,

    ich versuche gerade die Keys der M32 (als Slave) mit der M256 (als Master) auszulesen.

    Mittlerweile funktioniert es, dass ich den pressedkey auslesen kann. Ich würde aber lieber den releasedkey verwenden. Hierbei bekomme ich aber bei allen 5 Tastern immer nur eine '0' zurückgeliefert.

    Hoffe, ihr könnt mir helfen.



    if(getStopwatch4() > 250)
    {
    getAllRegisters();


    if(interrupt_M32status.keypressed)
    {
    writeInteger_WIFI(pressedKeyNumber, DEC);
    //writeInteger_WIFI(releasedKeyNumber, DEC);
    writeChar_WIFI('\n');

    }

    //if(interrupt_M32status.keychange)
    // {
    //// writeInteger_WIFI(pressedKeyNumber, DEC);
    //writeInteger_WIFI(releasedKeyNumber, DEC);
    // writeChar_WIFI('\n');

    // }

    setStopwatch4(0);
    }

  5. #25
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi matze1,
    solange eine Taste gedrückt wird, enthält pressedKeyNumber die Nummer der Taste und releasedKeyNumber 0.
    Solange keine Taste gedrückt wird, enthält pressedKeyNumber 0 und releasedKeyNumber die Nummer der zuletzt gedrückten Taste.

    Eine Abfrageschleife kann z.B. so aussehen:
    Code:
    uint8_t last_releasedKeyNumber;
    
    /**
     * M32 key state changed
     */
    void keyStateChanged(void)
    {
    	writeString_P_WIFI("\n\n===> key state changed!!!\n"); 
    	writeString_P_WIFI("ADC_KEYPAD value: ");
    	writeInteger_WIFI(adcKeypad, DEC);
    	writeChar_WIFI('\n');
    	writeString_P_WIFI("Key is pressed:   ");
    	if(interrupt_M32status.keypressed) writeString_P_WIFI("Yes\n");
    	else writeString_P_WIFI("No\n");
    	writeString_P_WIFI("[Last rel. key number: ");
    	writeInteger_WIFI(last_releasedKeyNumber, DEC);
    	writeString_P_WIFI("]\nReleased key number:   ");
    	writeInteger_WIFI(releasedKeyNumber, DEC);
    	writeChar_WIFI('\n');
    	last_releasedKeyNumber = releasedKeyNumber;
    	writeString_P_WIFI("Pressed key number:    ");
    	writeInteger_WIFI(pressedKeyNumber, DEC);
    	writeChar_WIFI('\n');
    	writeChar_WIFI('\n');
    }
    
    	uint8_t regM32Buf[4];
    
    	while(true) 
    	{
    		task_checkPCINT15();	// RP6 M32 main task
    		if(interrupt_M32status.keyChange)
    		{
    			I2CTWI_readRegisters(I2C_RP6_M32_ADR, I2C_REG_ADC_KEYPAD_L, regM32Buf, 4);
    			adcKeypad = regM32Buf[0] + (regM32Buf[1]<<8);
    			releasedKeyNumber = regM32Buf[2];
    			pressedKeyNumber = regM32Buf[3];
    			keyStateChanged();
    		}
    		task_I2CTWI();
    	}
    Gruß
    Dirk

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. RP6Control M32: Library für 8 Servos
    Von Dirk im Forum Robby RP6
    Antworten: 84
    Letzter Beitrag: 12.02.2013, 21:17
  2. Slave Transmitter und Slave Receiver Mode
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.02.2011, 19:55
  3. RP6Control M32: Tonfrequenzen
    Von Dirk im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 10.10.2009, 18:47
  4. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  5. Antworten: 0
    Letzter Beitrag: 26.08.2007, 15:03

Berechtigungen

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

Solar Speicher und Akkus Tests