Envoi programme sans Programming Editor

Emile

Senior Member
Bonjour à tous.

Une question par ces temps neigeux :)


Je suis en train de faire un module embarqué pour gérer des jeux de lumières basse tension pour un bassin extérieur.

Tout marche pas de soucis j'ai mis mon programme sur un 28X1.

Je m'étais inspiré d'une technique du forum pour "tricher" c'est à dire avoir plus de choix en entrée avec un réseau de resistances et l'entrée ADC en lecture , en fonction de la valeur séléctionnée par un commutateur rotatif et le jeu de résistance je tombe sur une valeur , cette valeur correspond à un scénario dans mon picaxe.

La question que je me pose , ne serait il pas plus simple car j'ai prévu de mettre une trentaine de scénarios lumineux , d'avoir un programme par scénario et de l'envoyer dans le picaxe si je souhaite en changer ?

Cela m'éviterait d'avoir 50 000 lignes de code et en plus je suis limité à 25 positions sur mon commutateur.

Ne peut on pas envoyer le programme vers le picaxe sans ordinateur ? Par le biais d'un boitier avec une EEprom qui aurait en mémoire la liste des programme et je sélectionne pour envoyer ?

Merci :)

Emile
 

PieM

Senior Member
Bonjour,

La mémoire du 28X1 est trop petite ?
je ne vois pas trop l'intérêt, en supposant que cela soit possible, car il faudra bien toujours un système pour sélectionner le programme !
si le commutateur 25 positions est insuffisant, il suffit de rajouter un inter sur une entrée et ça double le nombre de scenarios. 2 inters et c'est 100 scenarios ! Versailles, quoi :D
 

westaust55

Moderator
Tandis que je ne suis pas sûr que je comprends entièrement votre projet, une pensée est d'employer un external EEPROM tel que 24LC256 (32768 bytes) ou 24LC512 (65536 bytes). Votre programme aurait besoin alors seulement d'un indicateur pour l'adresse commençante de chaque ordre léger et téléchargerait alors séquentiellement les données pour la prochaine étape des lumières.

Votre sélecteur d'entrée (dans le CDA ou autre) peut alors choisir un ordre et employer une table de CONSULTATION pour trouver la première adresse d'EEPROM pour le début de l'ordre léger.
 

Emile

Senior Member
Oui je pense que je vais rester sur l'option du commutateur ca m'évitera de me compliquer la vie !

Merci !

EMILE
 

radio7tv

New Member
Lire d'EEPROM

Salut Emile,
il y a deux ans j'avais programmé un 28x1 pour lire des variables d'un EEPROM pour après les utiliser à controller
un oscillateur numérique (DCO). La selection fonctionne avec deux
potentiomètre connectés aux entrées ADC du picaxe, la frequence souhaité est affichée sur un LCD et après touchant un buton "actualiser" les variable correspontantes sont cherchés d'EEPROM. Peut-être le code de SRC11 pourait vous aider.




Code:
'program src11.bas
'SoftRock Control
'Thomas MARTIN, DF7TV
'date 080415
'hardware used:
'uP: Picaxe 28X1
'One linear potentionmeter of 47k is connected to ADC 2 ("segment" select)
'One linear potentionmeter of 47k is connected to ADC 3 ("frequency" select)
'One push-button is connected to IN1 ("set" -- update DCO)
'One push-button and 4k7 resistor is connected to /RST ("up Reset")
'LCD: Picaxe AXE033 v2 (Real Time Clock DS1307 not installed) 
'DCO: SI570 chip 570CAC000141DG (CMOS)
'Si570 board by WB6DHW 
'EEPROM: Microchip 24LC256 I2C (frequency info [display text + register values for DCO] is
'                               stored from address $4000 on at increments of 
'                               64 bytes = 1 page. You may use up to 16 bandsegments 
'                               having up to 16 different frequencies each)
'
'An intended change of frequency is directly displayed on the LCD but only transfered
'to the DCO after pressing the "SET" button until the "update" message appears.
' 
main: pause 500                 'time for initialising the LCD
  serout 7,N2400,(254,1)        'clear display, followed by pause 30
  pause 30
  serout 7,N2400,(254,128,"SoftRock Control")  'output text
  serout 7,N2400,(254,192," SRC11 by DF7TV ")  'output text
  pause 2000
  serout 7,N2400,(254,128,"Select frequency")  'output text
  serout 7,N2400,(254,192,"and hold 'SET'  ")  'output text
  pause 3000
  serout 7,N2400,(254,1)         'clear display, followed by pause 30
  pause 30
  let b20 = 1                    'set startup-variable b20

cont: readadc10 2, w8              'read ADC into w8 (= b17:b16) = "SEGMENT"
      readadc10 3, w9              'read ADC into w9 (= b19:b18) = "FREQUENCY (within SEGMENT)"
                                 'scale range of w8 from {0,1,2,...,255} into... 
      'let w8  = w8/16 * 1024       '...{0,1,2,...,14,15}*1024 for a total of 16 segments
      'let w8  = w8/32 * 1024       '...{0,1,2,...,,7}*1024 for a total of 8 segments
      let w8  = w8/64 * 1024        '...{0,1,2,3}*1024 for a total of 4 segments
      'let w8  = w8/128 * 1024      '...{0,1}*1024 for a total of 2 segments
                                 'scale range of w9 from {0,1,2,...,255} into... 
      let w9  = w9/16 * 64          '...{0,1,2,...,14,15}*64 for a total of 
                                    '16 frequencies in each segment
      'store the required EEPROM address to read frequency info into w9 (= b19:b18)
      let w9  = w9 + w8 + $4000  
      i2cslave %10100000, i2cfast, i2cword  'set EEPROM slave parameters for 24LC256
      pause 10                    'read frequency info      
      readi2c w9,(b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b21,b22,b23,b24,b25,b26)
      pause 10                    'output text of frequency info
      serout 7,N2400,(254,128,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)
      pause 10
      if pin1 = 1 OR b20=1 then st570  'if IN1 is HIGH (button "set" pressed) OR start-up
                                       'variable is set "1" then set SI570 to frequency shown 
      goto cont                        'on LCD --otherwise continue watching for intended frequency

st570:                                 'set SI570  frequency
      i2cslave %10101010,i2cfast,i2cbyte   'initialize I2C for SI570
      pause 10          
      writei2c 137,($10)                   'freeze DCO so freq can be modified
      pause 10                             'wait for write
      writei2c 7,(b21, b22, b23, b24, b25, b26)    'write SI570 registers 7-12
      pause 10                             'wait for write
      writei2c 137,($00)                   'unfreeze DCO
      pause 10
      writei2c 135,($40)                   'newfreq
      pause 10
      readi2c 7,(b1,b2,b3,b4,b5,b6)        'read SI570 registers 7-12
      pause 10
      'check for correct SI570 register content by comparing content of SI570 registers 
      'and intended values:
      if b1=b21 AND b2=b22 AND b3=b23 AND b4=b24 AND b5=b25 AND b6=b26 then   
         goto ok570                        'message showing that SI570 was updated correctly
         else
         goto cont                         'continue to watch for frequency selection
      endif
      
ok570:serout 7,N2400,(254,192,"* DCO  UPDATED *")  'output text
      pause 500 
      serout 7,N2400,(254,192,"                ")  'clear  text 
      let b20 = 0                                  'clear start-up variable b20
      goto cont 
end
Le schéma de connexions se trouve par
http://www.qsl.net/df7tv/download/SRC11cir_a.pdf

Veuillez consulter

http://www.dspradio.org/df7tv/src11

pour les details.

Cordialement
Thomas
 
Last edited:
Top