PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HCS12 & AVISARO WLAN Modul



sneaker
24.06.2005, 11:52
Hallo zusammen,

hat vielleicht einer von euch Erfahrung mit dem Avisaro WLAN Modul.
Ich benutze es zusammen mit dem HCS12 in der I2C-Variante.Tja und
bekomme es aus irgendwelchen Gründen (welche höchstwahrscheinlich
an mit liegen) nicht hin, das Modul anzusprechen.

So würde ich gerne etwas vom Modul auslesen:


void wlanreceive(void){
UINT8 read, ack;
UINT16 size;
UINT8 adresse = 73;
if(iicfailed==0){
startIIC();
}
if(iicfailed==0){
ack=sendIIC(adresse<<1|1);
}
if(iicfailed==0){
size = receiveIIC(ack);
}
size <<= 8;
if(iicfailed==0){
size |= receiveIIC(ack);
}
if(size == 0){
stopIIC();
}
if(size == 0xfffff){
stopIIC();
}
else{
do{
if(iicfailed==0){
read = receiveIIC(ack);
putSCI0(read);
}
}while(size != 0);
stopIIC();
}
}


Jetzt speichere ich die empfangenen Daten nicht in einem Buffer, sondern gebe sie über die serielle Schnittstelle (putSCI()) sofort aus. Geht das überhaupt ? oder ist der Buffer ein muss ! Die Routinen funktionieren alle, ich habe damit auch schon das SRF08 angesprochen.
Das mit dem Buffer hab ich sowieso nicht ganz gerafft, müsste ich hier ein Array anlegen, also z.B. UINT8 *empfangsBuffer[10];
Am Anfang würd es mir aber reichen wenn ich überhaupt das Modul über den I2C-Bus ansprechen könnte.

Ich sach schonmal Vielen Dank im Vorraus

sneaker

29.06.2005, 10:59
auf den ersten blick: if(size == 0xfffff)...
UINT16 geht von 0....65535, nicht bis 1048575.
hätte eigentlich dein compiler anmeckern sollen

29.06.2005, 11:14
vielleicht solltest du noch debug-ausgaben machen wenn size == 0 (modul hat keine daten) oder size == 0xffff (i2c-fehler).

einen buffer brauchst du nicht unbedingt. das mit dem abholen der daten und direkt an die serielle senden sollte gehen, naja, ich nehme an die sende-funktion sollte nicht zu viel zeit brauchen, aber ich glaube das ist egal.

Cols
29.06.2005, 18:12
Die Ansteuerung der I2C Schnittstelle vom Avisaro WLAN Modul ist ganz gut im Dokument (www.avisaro.com/download/Avisaro_Hardware_3-0.pdf) beschrieben. Auf Seite 7/8 ist der Ablauf, auf Seite 23 ist Source Code dazu abgebildet ... hoffe dies hilft.

Gruß, Cols

sneaker
30.06.2005, 13:29
Hallo an alle,

erstmal danke für die Antworten. Der einfach Test aus der Anleitung funktioniert, ich kann also die 4 Bytes auslesen. Problem war das er das
Modul immernoch ausgelesen hat und auf dem Bildschirm eine 255 bzw.
den entsprechenden Ascii-Buchstaben gezeigt hat und darin ist das OK erstaml untergegangen.

Mein nächste Problem ist nun das ich nur einmal die Daten abholen kann, danach geht es erst wieder wenn ich das Programm auf dem Mikrocontroller neustarte. Ich denke das es daran liegt das ich, wenn keine Daten da sind also size==0, ein Stopsignal sende, obwohl ich vorher ein ack gesendet habe.l


...
size |= receiveIIC(ack); //Lese und sende ACK
}
if(iicfailed==0){
if(size == 0 || size == 0xffff){
stopIIC(); //Stoppsignal
...

Also muss ich wohl die Funktion receiveIIC(ack) teilen in I2C_Byte() und I2C_nop().

Ich hoffe ich liege richtig.

MfG
sneaker

30.06.2005, 17:56
das wird es sein. das letzte byte wird ja nicht bestätigt (kein ack, sonst würde das modul eventuell ein byte zuviel schicken). es muß nur die clock-leitung einmal getaktet werden, und danach das stop signal kommen. es ist übrigens gleich, egal ob du nur die anzahl der daten abholst (also nur size) oder size und ein paar daten dazu; beim letzten byte nur einmal clocken, kein ack

30.06.2005, 19:01
Heidiho,

es funz, ich kann jetzt alle Daten vom Modul über I2C auslesen. Jetzt kommt das senden dran :cheesy: . Danke für die Unterstützung.

MfG
sneaker