Go Down

Topic: Topic permanente di programmazione newbie (Read 38381 times) previous topic - next topic

astrobeed


Perchè non memorizzi il catalogo dei micro in una eeprom esterna ,così ti puoi allargare con il numero dei micro supportati a tutti i pdip.


Ma perché deve complicarsi la vita quando ha 32k di flash a disposizione, hai voglia a memorizzare micro  :D

BrainBooster

:smiley-roll-sweat: dici che bastano per tutti i micro a 8 bit pdip?

leo72


Perchè non memorizzi il catalogo dei micro in una eeprom esterna ,così ti puoi allargare con il numero dei micro supportati a tutti i pdip.

Perché ormai l'HW è definito e non può usare componenti aggiuntivi. Inoltre avere tutto in un unico firmware è per lui molto vantaggioso, dato che il firmware sarà disponibile per il download dal sito della rivista. Quindi la gente dovrà flashare 1 sola cosa. (così ho capito)

BrainBooster

ok, capito.
Ma per espansioni future... ;)

astrobeed

#49
Mar 06, 2012, 04:56 pm Last Edit: Mar 06, 2012, 04:57 pm by astrobeed Reason: 1

:smiley-roll-sweat: dici che bastano per tutti i micro a 8 bit pdip?


Facciamo due conti utilizzando le matrici che ho consigliato a Michele, ipotizzando di memorizzare i dati di 100 micro abbiamo quanto segue:

20*100 = 2000 byte  per le descrizioni
3*100   = 300 byte   per le signature
4*100   = 400 byte   per i fuse e i dati accessori
--------------------
Totale    2700 byte

Direi che volendo ci entra pure tutto il catalogo Atmel delle mcu a 8 bit e avanza molto spazio  :D



Michele Menniti

Noto con piacere che Leo e BB si passano la palla, BB!!!! ]:D dopo tutta la questione di ieri ancora parliamo di modifiche hardware?
:smiley-eek-blue:
Leo, hai capito benissimo XD, in realtà i firmware da flashare saranno tre:
micro master PC
micro master stand-alone
micro key+lcd
i primi due sono alternativi, cioè metto l'uno o l'altro, perché non credo di riuscire a tirare fuori un unico firmware in grado di riconoscere la presenza dell'altro micro e gestire i messaggi seriali di conseguenza. Ricordo a tutti che TUTTE LE LINEE sono occupate e non potevo usare la comunicazione I2C quindi li ho collegati tramite seriale standard; in pratica sul pcb master ho un connettore seriale che all'occorrenza mi serve come presa per un convertitore usb-seriale esterno (per collegamento al PC) oppure per il dialogo col PCB keypad+LCD20x4, gestiti da un altro 328P che ovviamente avrà il suo firmware.
Tutto sarà gratuitamente scaricabile dal sito di Elettronica In, a questo punto mi pare che la soluzione di Astro sia perfetta, non penso nemmeno che si arrivi ad un centinaio, e comunque una parte sarebbero incompatibili con i segnali, credo, quindi perdere un paio di K di flash è qualcosa di fattibilissimo, addirittura mi verrebbe la tentazione di usare la ram a questo punto ;) che ne dite?
Comunque fra poco mi metto al lavoro, ho altri dubbi da levarmi:
ho letto che il tiny2313 usa un HVSP un po' "potenziato", con un paio di segnali in più, no problem, ma voglio capire ora cosa succede col riconoscimento automatico; inoltre sono curiosissimo di provare un ATmega8 che avevo fatto fuori a suo tempo, proprio morto, non bricked :smiley-red:, ma che qualche segno di vita forse lo dava, vediamo che succede anche qui.

A dopo  :)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed


credo, quindi perdere un paio di K di flash è qualcosa di fattibilissimo, addirittura mi verrebbe la tentazione di usare la ram a questo punto ;) che ne dite?


In realtà non credo che metterai più di 20 modelli diversi di micro, anche perché puoi inserire solo quelli disponibili in case dip il che esclude molti modelli di micro, p.e. il MEGA2560.
Rifacendo i conti per 20 modelli abbiamo :

20x20 = 400
20x3  =  60
20x4  =  80
------------
Totale  540 byte.

Sicuramente entrano senza problemi nella ram visto che te ne serve poca per far funzionare lo sketch, però a mio avviso i dati statitici è sempre bene caricarli nella flash piuttosto che nella ram o nella EEPROM.



Michele Menniti

La riga dell'array della signature mi dà errore di compilazione:

41: error: hexadecimal floating constants require an exponent
42: error: expected initializer before 'signature'

l'istruzione è questa:
Quote
char byte signature [3] [20] = { {0x1E,0x95,0x0F},
                                 {0x1E,0x93,0x0D},
                                 {0x1E,0x91,0x0A},
                                 {0x1E,0x93,0x0C}
                               };
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Beh, il compilatore ha ragione. O char o byte, mica puoi dichiararlo di 2 tipi diversi  XD
E poi hai invertito le dimensioni dell'array, nel tuo modo vuoi creare un array di 3 elementi da 20 caratteri l'uno, a te serve l'opposto, quindi:

Quote

byte signature [20] [3] = { {0x1E,0x95,0x0F},
                                 {0x1E,0x93,0x0D},
                                 {0x1E,0x91,0x0A},
                                 {0x1E,0x93,0x0C}
                               };

astrobeed


Beh, il compilatore ha ragione. O char o byte, mica puoi dichiararlo di 2 tipi diversi  XD


Questo è colpa mia, quando ho fatto copia e incolla è successo un casino del quale non mi sono accorto, ci va solo byte, adesso correggo l'esempio originale.

Quote

E poi hai invertito le dimensioni dell'array, nel tuo modo vuoi creare un array di 3 elementi da 20 caratteri l'uno, a te serve l'opposto, quindi:


No queste sono giuste, 3x20 e non 20x3, visto che è la signature.

leo72

Compila con 3x20 e vedi se non ti da errore.  :P
3 elementi da 20 caratteri l'uno, qui abbiamo invece il caso inverso: dobbiamo memorizzare tanti elementi da 3 caratteri l'uno, serve una matrice x*3, con x che è il numero di signature da contenere

astrobeed


Compila con 3x20 e vedi se non ti da errore.  :P


Mi sa che stamattina sto ancora dormendo, hai ragione anche i due valori dell'inizializzazione sono invertiti tra loro, questo è quello che succede quando si scrive al volo del codice senza provarlo.  =(

leo72


Mi sa che stamattina sto ancora dormendo, hai ragione anche i due valori dell'inizializzazione sono invertiti tra loro, questo è quello che succede quando si scrive al volo del codice senza provarlo.  =(

Dalle mie parti si dice che "sbaglia anche il prete all'altare" ;)

Michele Menniti

Diciamo che la mia dichiarata in Topic fatale ignoranza non mi ci ha fatto capire nulla, al solo comando "byte" ero arrivato ma non capivo l'errore successivo, evidentemente quello dell'inversione, ed il fatto che la prima istruzione avesse 20, 20 non mi ha aiutato a capire.
COmunque ieri sera ho messo a punto grosso modo l'impostazione del 4° byte dell'array signature, mi servono 6 valori per le possibili combinazioni di EFuse e Tipo di Programmazione; sono state fondamentali le prove hw che ho descritto nell'altro Topic. Grazie a tutti, oggi altra giornataccia, ci sentiamo appena possibile.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Testato

io cambierei l'hardware  :)
(battuta per iscrizione)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up