AVR DS2423 EMU : Ärger mit der READSCRATCH Kommando für MemoryPatch Support

Begonnen von ritchie, 02 Dezember 2015, 20:12:29

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

derzeit bin ich mit der Realisierung des RAM Betrieb MemoryPage14 & MemoryPage15  für die ATINY 1Wire EMU beschäftigt. Irgendwie scheint es aber so zu sein, das der OWServer nach dem Rücklesen des SCRATCHPAD nicht mit den Daten einverstanden zu sein. Es kommt kein Kommando COPY_SCRATCH PAD

Zu Testzwecken habe ich hierbei folgende Daten zum AVR gesendet:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  (32 mal AA)

Das ist die Antwort auf den READ SCRATCHPAD (Memory Page 15), jedoch nur die ersten 32 Byte.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0001E0

Prepare Read Scratchpad Routine:

case OW_READ_SCRATCHPAD:
lmode=OWM_READ_SCRATCHPAD;
lbytep=0; // Clear Byte Pointer we are starting a new communication
NumberOfAdressBytes = 0; // Counter for the Address information
MemoryOffset= 0;
counterpack.bytes[0]=LastWriteScratchPadTA1;
counterpack.bytes[1]=LastWriteScratchPadTA2;
counterpack.bytes[2]=LastWriteScratchPadES;

MemoryPage14[lbytep]=counterpack.bytes[lbytep];

lactbit=(lbitp&counterpack.bytes[lbytep])==lbitp; // Prepare the next bit for Transfer
lwmode=lactbit; // Set the first bit t send
break;



Execute Read Scratchpad Routine:

    case OWM_READ_SCRATCHPAD: // read back the Scratch Pad from the Master
RESET_LOW;
p=lactbit; // next bit
lbitp=(lbitp<<1);
if (!lbitp) //if 8 bits are done, next byte
{
lbytep++; // Send the next byte
NumberOfAdressBytes++; // Counter the address bytes
lbitp=1; // Reset the bit pointer
if(NumberOfAdressBytes > 2 ) // Do we have send the Address information TA1/TA2/ES
{
counterpack.bytes[lbytep]=ScratchPad[MemoryOffset]; // Copy the Scratch Pad byte to transmit
MemoryOffset++; // address the next byte
if (MemoryOffset > 31 ) // Do we reached the end the bytes to transmit
{
lmode=OWM_SLEEP; // we are finish
break;
}
}
}
if ( lbytep < 32) // Debug !!
{
MemoryPage14[lbytep]=counterpack.bytes[lbytep]; // debug
}

lactbit=(lbitp&counterpack.bytes[lbytep])==lbitp; // get the next bit to send
lwmode=lactbit; // mark bit for transmit mode
break;


Ich vermute mal das ich das E/S Bit nicht richtig ansteuere oder eine Sendefehler des ersten Bit vorhanden ist.
Für Tips bin ich dankbar, da ich das Ganze gerne abschliessen würde und hier wieder auf der Webseite einstellen würde.

Viele Grüße
R.


IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

Hallo Zusammen,

ich habe den Bug gefunden. Mit dem ES Bit bin ich mir noch etwas unschlüssig. Ich kann aber jetzt via OWHTTP in das RAM des Atiny schreiben.

Jetzt kommt noch das Speichern ins EEPROM und dann würde ich mich freuen, wenn es jemanden geben würde, der das ganze auch bei sich mal testen könnte.

Viele Grüße
R.

IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv