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!]
Druckbare Version
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!]
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-
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.
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);
}
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();
}