Go Down

Topic: Disparition eeprom_read_word(adr) ! (Read 4082 times) previous topic - next topic

Benoît ROUSSEAU

Re, c'est FAIT !

Ca fonctionne !

J'avais divers pbs dans mon code, c'est résolu. Du coup j'ai revu mes fonctions de lecture/écriture dans l'eeprom et j'ai trouvé pourquoi auparavant mes fonctions refusaient de fonctionner avaec une adresse en int*. J'écrirai là-dessus ensuite...

Bon, le système est scindé en deux programmes : prog_jours2 et test_jours2.

Le premier, prog_jours2, inscrit les jours dans l'EEprom.
Le second, test_jours2, affiche sur la liason série (j'utilise HyperTerminal) le contenu de l'EEprom pour vérifier.

Le format de stockage dans l'EEprom est le suivant :
- premier octet, le nombre de chaînes stockées ;
- les n (nombre de chaînes stockées) mots suivants, les index de début des chaînes (ce que j'appelle la SAT, String Allocation Table) ;
- les octets suivants sont les caratères des chaînes de caractères avec un 0 délimiteur en fin de chacune.

Suite à différents essais, ... j'ai changé le système de description des chaînes. Il n'y a plus de tableau pour les "nombres", mais une chaîne de caratères. Plus simple à modifier vérifier, coder, ... Et cette chaîne de caractères est "compressée" pour éviter les redites. Le système est le suivant '/' pour une fin de chaîne, '1' pour 'un', 2 pour 'deux', ... 'D' pour 'dix', ... regardez le code, c'est compréhensible, je pense.

Le programme met un certain temps à programmer l'EEprom. Installez si vous le pouvez une LED sur la broche 13, elle s'allumera à la fin de la programmation de l'eeprom. Sans LED, attendre 30s.

Pas de place pour les programmes en direct dans le message donc :
- programme de programmation de l'EEprom : http://perso.wanadoo.fr/rousseau-benoit/codes/arduino/prog_jours2.txt,
- programme de lecture de l'EEprom : http://perso.wanadoo.fr/rousseau-benoit/codes/arduino/test_jours2.txt.

Dites-moi si ca fonctionne chez vous.

a+.
Cordialement,
Benoît ROUSSEAU

mrbbp

#16
Nov 23, 2006, 07:39 pm Last Edit: Nov 23, 2006, 07:41 pm by mrbbp Reason: 1
Bonjour Benoît... ça fait longtemps hein :P

gros, gros projet sur le feu... pas eu de temps libre... mais là j'en ai du coups je reviens à mes amours.
j'ai installé un atmega168 sur une de mes cartes, mais le problème de manque de ram est le même que sur l'atmega8... donc j'ai besoin d'écrire mes trucs dans la rom...
donc je suis allé rechercher ton prog et j'ai testé....avec arduino06
et j'a une erreur ;D (3 versions d'arduino plustard...)

Code: [Select]
In function 'void eeprom_wr_byte(const unsigned int*, byte)':
error: 'EEWE' was not declared in this scope



qu'est c' y veut le monsieur ? :o
y a pas d'init de la var ?

merci d'avance

eric

Benoît ROUSSEAU

salut :)

non, c'est un problème du aux changements du nom des registres dans l'ATMEGA168 j'ai résolu le pb mais je ne te répondrai que demain... patience...
Cordialement,
Benoît ROUSSEAU

mrbbp


Benoît ROUSSEAU

Salut,

Désolé, je t'avais oublié, j'ai enchaîné deux missions et je pensais avoir le temps... Je te réponds ce soir de l'hôtel... :) la je suis en cours et comme je suis le formateur, "ca la fout mal".
Cordialement,
Benoît ROUSSEAU

Benoît ROUSSEAU

Salut,

Alors...

Avec le 168 je n'ai pas encore pris le temps de réécrire des fonctions de gestion l'eeprom mais elles existent toujours dans la lib donc j'utilise celles de la lib.

En clair :
1) en tête de code je place : #include "avr/eeprom.h"
2) j'utilise la syntaxe avec cast (transtypage) pour les accès : sensibilite = eeprom_read_byte((const uint8_t*)eepromadresse++);
3) pour écrire idem genre : eeprom_write_byte ((uint8_t*)eepromadresse, sensibilite);

En complément de ceci je vous prépare un "post" sur la gestion des interruptions externes sur le 168 et sur la réduction de la taille du code. Pour l'instant je à l'étranger et débordé de travail. Un peu de patience pour que je rédige, mais ca fonctionne.
Cordialement,
Benoît ROUSSEAU

Go Up