Go Down

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

Michele Menniti

E chi ti ferma più? :D
Nel mio piccoletto ho una buona notizia ed una un pò meno, ma credo rimediabile.

Sono riuscito ad implementare la nuova routine ed ora riesco a far sparire in un istante il blink dal mio 328P :smiley-mr-green: l'ERASE funziona!!! Ora devo aggiungere il necessario per le altre modalità di programmazione.

invece mi sono accorto che in HVPP il primo fuse che leggo (ho provato ad invertirli, ecco perché sono certo) me lo restituisce in FF anche se in realtà ha un altro valore, che vedo regolarmente se resetto e rileggo; la cosa strana è che la questione è alterna, cioè ad ogni reset una volta lo legge una volta non lo legge; poiché il reset riavvia il firmware ma non cambia i valori memorizzati nel micro ho iniziato una dolorosa ricerca; per ora ho scoperto che se disabilito il comando iniziale (parto per default con la modalità HVSP) SDO=LOW (l'SDO è il RDY in modalità HVSP) il problema svanisce; ho un paio di soluzioni in mente, Vi aggiorno.
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

amario57

Eh si, ormai astro non si ferma più, ottima idea sarebbe proprio un grosso aiuto per GUI generiche su PC e per ora fermati qui   :D

amario57

E osando di più dotare Arduino di un display standalone non virtuale ma reale, usando uno shield tipo questo:
http://microvga.com/arduino
costa circa 30 dollari
in vga ?   per ora ??
dal virtuale al reale

astrobeed


E osando di più dotare Arduino di un display standalone non virtuale ma reale, usando uno shield tipo questo:
http://microvga.com/arduino
costa circa 30 dollari


Bell'oggetto, però utilizza cinque pin di Arduino e la libreria è veramente minimale, non la vedo di semplice utilizzo.

Funzioni supportate:

_cputs
_kbhit
_putch
_getch
clrscr
clreol
textbackground
textcolor
gotoxy


Testato

#214
Mar 13, 2012, 11:36 am Last Edit: Mar 13, 2012, 11:39 am by Testato Reason: 1
Bell'idea sto coso, peccato non sia open
Cmq si puo' usare anche in seriale, quindi solo 2 pin

Code: [Select]
Q: Can I use MicroVGA in UART mode?
Answer:
Yes, however we highly recommend using SPI mode for two reasons: UART is usually used for bootloader and the MicroVGA Arduino library uses natively SPI mode.

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed


Bell'idea sto coso, peccato non sia open


Dipende da cosa intendi per open, è un prodotto finito con un suo datasheet e relativi manuali d'uso, come hardware sopra c'è un video controller a bassa risoluzione e un micro di interfaccia, nulla di strano e visto il costo non ha alcun senso tentare di farselo in casa  :)

Michele Menniti

Ultimo aggiornamento per oggi, poi sedute d'esami ]:D

Problema lettura FUSES: risolto, ho verificato che il problema esisteva anche nel firmware scritto da mightyohm; in pratica loro ritenevano di poter "impunemente" passare dalla modalità HVSP alla HVPP e viceversa, senza chiudere e reinizializzare i comandi di programmazione; nel loro caso, poiché si svolgeva una sola operazione di lettura e scrittura, dopo aver fornito manualmente tutti gli elementi, il problema si poteva verificare più raramente, da un punto di vista statistico.
Invece il mio firmware si basa tutto sull'automatismo del recupero delle informazioni dal micro; ho risolto mettendo, subito dopo la prima lettura del micro, che mi fornisce anche la modalità specifica di programmazione, una reinizializzazione, nel caso si tratti di HVPP o HVP13 (ricordo che questa sigla l'ho inventata io, in realtà è una variante della HVPP per i tiny a 20pin), invece se il micro è un HVSP, che è il mode di default resta tutto com'è; comunque sto commentando praticamente ogni riga, lo sketch ha fini didattici per Elettronica In, quindi devo proprio spiegarlo passo-passo.

TEST ERASE: i passaggi che mi ha dato Astrobeed provengono dal DS del 328, ho scritto la routine e funziona benissimo in HVPP; ho verificato che dovrò implementare un'ulteriore routine per i tiny 84/85, un po' più complessa, ma dovrei farcela, ormai la lettura di quelle tabelle e la loro traduzione in firmware mi è abbastanza familiare  XD. Invece dovrei testare l'ERASE sui tiny 2313 e 861, se non ricordo male il core tiny dovrebbe avere almeno i dati del 2313, non so se ha quelli dell'861, ma la differenza tra i due sta solo nella pinature; ormai ho certezza che se funziona con uno funziona anche con l'altro. C'è ancora da lavorare.... :smiley-sweat:
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

Non ha l'861, al momento. Non c'è neanche nella versione 1.0.

Testato

#218
Mar 13, 2012, 10:25 pm Last Edit: Mar 13, 2012, 10:27 pm by Testato Reason: 1
due domande didattiche, scusa se forse le hai gia' risposte

1- ogni micro puo' avere solo un tipo di programmazione hv, oppure ci sono quelli che la supportano entrambe sp-pp ?
2- l'erase cancella anche la eprom ?

Idee al volo:
1- non so se ci hai pensato, ma io farei un sottomenu' di scelta sull'erase
.. cancella solo flash
.. cancella solo eeprom
.. cancella flash+eeprom
.. cancella solo bootloader (questa e' un'idea nuova  :) a scopo puramente didattico, la potresti chiamare quick format, perche' cosi' come sugli HD ti perdi il primo carattere del file ma il file e' presente, sul micro ti perderesti il boot, quindi lo sketch non parte, pur essendo presente il programma)

2- si potrebbe fare un menu' di gestione delle protezioni, non ho studiato la materia quindi magari dico sciocchezze, ma si puo' proteggere un micro in secondo momento (proteggere da lettura per non farsi copiare) dopo il caricamento dello sketch ? oppure lo si deve decidere per forza all'inizio ?
Se si puo' fare, sarebbe bello un menu' Anticopia, in qualsiasi momento prendi un micro gia' programmato e lo passi nel rpogrammatore per la protezione
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Michele Menniti


due domande didattiche, scusa se forse le hai gia' risposte

1- ogni micro puo' avere solo un tipo di programmazione hv, oppure ci sono quelli che la supportano entrambe sp-pp ?

ogni micro richiede un SOLO tipo di programmazione: HVPP o HVSP, poi c'è una variantr dell'HVPP (che io ho ribattezzato HVP13) che serve per i tiny a 20pin

Quote

2- l'erase cancella anche la eprom ?

ovviamente ti riferisci a quella interna, la risposta è: dipende dall'impostazione dei fuse, c'è una combinazione che permette di proteggere l'EPROM durante le operazioni di chip_erase, nei valori di default l'impostazione è Eprom_protected; quindi puoi decidere se cancellare solo la flash o anche l'eprom; le altre modalità che suggerisci come idee sono impraticabili, per quanto ho letto e compreso fino a questo momento.

Quote

ma si puo' proteggere un micro in secondo momento (proteggere da lettura per non farsi copiare) dopo il caricamento dello sketch ? oppure lo si deve decidere per forza all'inizio ?
Se si puo' fare, sarebbe bello un menu' Anticopia, in qualsiasi momento prendi un micro gia' programmato e lo passi nel rpogrammatore per la protezione

non serve un'opzione, tu puoi cambiare il lock bit senza danneggiare il firmware contenuto, quindi credo sia sufficiente caricare il firmware e poi cambiare il lock bit in modo da impostare la protezione dell'area di meomoria flash; il reference spiega che dopo non puoi più riprogrammare  il lock bit, per cambiarlo bisogna fare per forza un chip_erase.
Ho studiato parecchio in questi giorni ;) ma potrei aver scritto qualche inesattezza, considera questa risposta come un chiarimento iniziale da approfondire :)
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

Michele Menniti

@ Leo: grazie del chiarimento, mi basta il 2313 per le prove.

Stamattina ho dedicato un'oretta al chip_erase HVSP ma il mallitto blink continua a blinkare sine pietatis  =( stasera al rientro altre prove, domani giornata definitiva, devo chiudere assolutamente, sono troppo in ritardo; tutto il resto (erase HVPP compreso) ora funziona a meraviglia, per essere la mia prima vera programmazione sono estremamente soddisfatto, soprattutto perché ho implementato tantissima roba che lo sketch di riferimento iniziale ora sembra davvero banale al confronto; ma naturalmente è stato fondamentale averlo, non a caso ho riportato nelle note iniziali il doveroso ringraziamento alla mightyohm e le loro note riguardo la licenza.
Per non tacere del grandissimo aiuto che mi avete dato, almeno ho approfittato per imparare, non faccio più errori con le "(", ")" e i ";"  :smiley-mr-green:
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

Specifico un paio di cose, approfondendo il discorso cancellazione del micro e protezione.

EEPROM
il bit EESAVE, che protegge la EEPROM funziona solo durante la cancellazione del contenuto del chip ("chip erase") effettuato con la tecnica che sta usando Michele. Puoi sempre forzare da terminale la cancellazione della EEPROM usando l'opzione "-e" di avrdude.

LOCK BIT
ii lock bit si possono modificare senza alterare il contenuto della Flash ma solo in una direzione, ossia si può solo aumentare il fattore di protezione ma non diminuirlo. Quindi se i lock bit sono impostati per permettere la sola lettura ma non la riscrittura (protezione media), è possibile impedire anche la lettura (protezione massima) ma non è possibile disattivare la protezione in scrittura (protezione assente).

Michele Menniti


Specifico un paio di cose, approfondendo il discorso cancellazione del micro e protezione.

EEPROM
il bit EESAVE, che protegge la EEPROM funziona solo durante la cancellazione del contenuto del chip ("chip erase") effettuato con la tecnica che sta usando Michele. Puoi sempre forzare da terminale la cancellazione della EEPROM usando l'opzione "-e" di avrdude.

lasciando perdere il terminale, è sufficiente cambiare lo stato del bit prima di fare l'operazione di chip_erase, cosa che si fa tranquillamente con l'opzione 2 del mio menu (inserimento fuse personali)

Quote

LOCK BIT
il lock bit si possono modificare senza alterare il contenuto della Flash ma solo in una direzione, ossia si può solo aumentare il fattore di protezione ma non diminuirlo. Quindi se i lock bit sono impostati per permettere la sola lettura ma non la riscrittura (protezione media), è possibile impedire anche la lettura (protezione massima) ma non è possibile disattivare la protezione in scrittura (protezione assente).

grazie per l'approfondimento, il succo quindi resta quello che ho detto, cioè una volta impostato il lock bit per proteggere la flash, l'unico modo per rimbuovere la protezione è fare un chip_erase che rimuove sì la protezione ma contestualmente cancella il contenuto rendendo efficace la protezione.

Invece questa cosa mi ha fatto riflettere sul fatto che mentre l'EESAVE è programmabile via fuse, lo stesso non si può dire del lock bit, mi pare; se è così forse dovrei prevedere l'opzione di variazione del lock bit con una voce tipo "proteggi micro", dite che vale la pena? mannaggia, ste cose sono come le ciliegie, una tira l'altra! :smiley-sweat:
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


grazie per l'approfondimento, il succo quindi resta quello che ho detto, cioè una volta impostato il lock bit per proteggere la flash, l'unico modo per rimbuovere la protezione è fare un chip_erase che rimuove sì la protezione ma contestualmente cancella il contenuto rendendo efficace la protezione.

Invece questa cosa mi ha fatto riflettere sul fatto che mentre l'EESAVE è programmabile via fuse, lo stesso non si può dire del lock bit, mi pare; se è così forse dovrei prevedere l'opzione di variazione del lock bit con una voce tipo "proteggi micro", dite che vale la pena? mannaggia, ste cose sono come le ciliegie, una tira l'altra! :smiley-sweat:

Come ho detto, puoi modificare i lock bit solo in un verso, ossia per aumentare il livello di protezione.
Potresti prevedere l'opzione, potrebbe essere carina, ma prima io ti consiglio di terminare la parte che hai ancora in fase di sviluppo, per non mettere troppa carne al fuoco.

Michele Menniti

Se risolvo rapidamente la questione dell'ERASE provo a dargli un'occhiata, altrimenti abbandono proprio l'idea, una volta che chiudo devo scrivere l'articolo e non posso più fare variazioni, tratto il sw come se fosse hw, altrimenti rischio di fare casini; semmai, con tutto il tempo si potrà pensare di proporre una versione 2 con altre implementazioni, vedremo....
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

Go Up