Ik heb onderstaande programma geschreven en er een functie ingebouwd zodat ik op een eigen plek in de EEprom doormiddel van volgende commando EWRITE Kanaal, [knipper] Dit werkt perfect als ik bijvoorbeeld op EEprom adres 3 iets wegschrijf leest hij dit netjes uit. Maar als ik nu iets in bijv EEprom adres 4 opsla veranderd hij het adres in EEprom 3 ? stond er eerst 500 in nr. 3 en sla ik in nr. 4 de waarde 200 op dan komt er op het beeld ipv 500 51400 te staan ? terwijl ik in EEprom nr. 3 500 heb opgeslagen waar zit hier de fout ?


DEVICE 16F628A         ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE       ;Alle ingangen digitaal

SYMBOL S1  = PORTB.0   ;Poort B.0 heeft nu de naam S1 
SYMBOL S2  = PORTB.1   ;Poort B.1 heeft nu de naam S2 
SYMBOL S3  = PORTA.7   ;Poort B.1 heeft nu de naam S3 
SYMBOL S4  = PORTA.6   ;Poort B.1 heeft nu de naam S4

;        76543210              <<<Een hulpregeltje
TRISA = %11000000             ;PORTA.6 en PORTA.7 zijn nu ingangen                
TRISB = %00000011             ;PORTB.1 en PORTB.2 zijn nu ingangen
    
DIM Kanaal AS DWORD      
DIM Knipper AS DWORD    
DIM Knipper1 AS DWORD   
DIM Test AS DWORD 

PORTB_PULLUPS = ON

CLEAR

Knipper = 50            ;Opstartwaarde
Kanaal  = 1             ;Opstartwaarde

Menu:

cls

while 1=1 

 Knipper1 = Knipper * 2
                              
 PRINT AT 1, 4, "Kanaal: ", DEC Kanaal , 
 PRINT AT 2, 2, "Speed: ", DEC Knipper1/1000,".", Dec1 Knipper1/100 , " sec"
  
    IF S1 = 0 THEN Kanaal = kanaal + 1
    delayms 20
    WHILE S1 = 0 : WEND 
    delayms 20 
    IF S2 = 0 THEN Knipper = Knipper + 50
    delayms 20  
    WHILE S2 = 0 : WEND 
    delayms 20      
    IF S3 = 0 THEN EWRITE Kanaal, [knipper]
    delayms 20
    WHILE S3 = 0 : WEND 
    delayms 20            
    IF S4 = 0 THEN goto Start
  
WEND

delayms 300

goto menu

Start:
    
    test = EREAD 3
  
    cls
    PRINT AT 1, 1, "lol " , dec test , " lol"
    delayms 5000
    
goto Menu

500 past niet in een byte, want het is groter dan 256. Het getal 500 staat dan dus ook in het volgende byte (plaats 4). Zet je dan in plaats 4 een ander getal, dan krijg je dit soort resultaten.

het eeprom gaat trouwens maar een beperkt (nouja... 1 mljn) aantal schrijfcycles mee, het flash helaas ook.

Dat komt omdat je te maken hebt met variabelen die dubbel woorden zijn, zodat de een de ander overschrijft.

[Bericht gewijzigd door Zoefje op (18%)]

het zijn zelfs DWORDs inderdaad. note_to_self: beter post doorlezen voor te reageren die nemen elk 4 plaatsen in het EEPROM in. als je ervoor zorgt dat ze die ruimte hebben zonder dat ze elkaar overschrijven dan moet het werken.

Hou bedoel je genoeg ruimte ? want heb bij lange na nog geen 32<< max dwords in eeprom gebruikt.

als je een Dword op plaats 1 zet, dan zit 'ie ook op 2,3 en 4. Omdat het 4 bytes zijn. Dus mag de volgende pas weer op plaats 5. En die daarna pas op 9, enzovoorts

Oke :) bedankt zal weer eens verder sluitelen :)

[Bericht gewijzigd door Gerwinh op (42%)]