[RISOLTO] - Programmazione Atmega328
-
- Messaggi: 100
- Iscritto il: sab 8 gen 2022, 16:01
- Località: Roma
[RISOLTO] - Programmazione Atmega328
Buongiorno, di recente ho acquistato il mini PC z80 che adesso vorrei rendere "stand-alone". Ho adocchiato l'interfaccia di Grant Searle, che si promette funzionante anche con le modifiche che Pier ha fatto sul suo progetto di mini PC. Però mi sono imbattuto nel problema di come programmare i uC, perché nella cartella con i file di programmazione che Grant ha pubblicato si dispone di un file HEX, uno ASM e alcuni INC. (foto e zip allegati).
Grazie in anticipo,
Edoardo
Grazie in anticipo,
Edoardo
- Allegati
-
- Foto
- Senza titolo.png (88.72 KiB) Visto 2023 volte
-
- SourceAndHEX.zip
- File
- (77.96 KiB) Scaricato 121 volte
Ultima modifica di Edoscardamaglia il gio 15 feb 2024, 8:39, modificato 3 volte in totale.
Edoardo M. Scardamaglia
Re: Programmazione Atmega328
Giusto per essere sicuri, stiamo parlando dell'interfaccia per Monitor e Tastiera descritta qui http://searle.wales/ vero?
Se il problema e' soltanto trasferire l'HEX file (giusto) ai due processori, per esempio un ATMEGA328P (che guarda caso e' il processore dell'Arduino UNO) e un ATMEGA88, si puo' usare un altro Arduino UNO con l'aiuto di una breadboard (dato che non trovo i piedini necessari nello schema di Searle) come "ISP Programmer", per esempio come e' spiegato qui: https://docs.arduino.cc/built-in-exampl ... ArduinoISP
Se sembra complicato possiamo esaminare il procedimento passo passo. Io mi sono comprato uno "shield" per Arduino UNO tipo questo:
https://www.ebay.it/itm/401619850733?ss ... 1438.l2649
(ma non sto suggerendo di acquistare esattamente questo oggetto, e' solo per far vedere di che si tratta), che montato su un Arduino UNO opportunamente programmato permette di inserire nello zoccolone blu il processore "destinazione" e poi, o usando la IDE di Arduino o (meglio secondo me) usando avrdudess https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/ di scaricarci file HEX a piacimento.
Se il problema e' soltanto trasferire l'HEX file (giusto) ai due processori, per esempio un ATMEGA328P (che guarda caso e' il processore dell'Arduino UNO) e un ATMEGA88, si puo' usare un altro Arduino UNO con l'aiuto di una breadboard (dato che non trovo i piedini necessari nello schema di Searle) come "ISP Programmer", per esempio come e' spiegato qui: https://docs.arduino.cc/built-in-exampl ... ArduinoISP
Se sembra complicato possiamo esaminare il procedimento passo passo. Io mi sono comprato uno "shield" per Arduino UNO tipo questo:
https://www.ebay.it/itm/401619850733?ss ... 1438.l2649
(ma non sto suggerendo di acquistare esattamente questo oggetto, e' solo per far vedere di che si tratta), che montato su un Arduino UNO opportunamente programmato permette di inserire nello zoccolone blu il processore "destinazione" e poi, o usando la IDE di Arduino o (meglio secondo me) usando avrdudess https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/ di scaricarci file HEX a piacimento.
-
- Messaggi: 100
- Iscritto il: sab 8 gen 2022, 16:01
- Località: Roma
Re: Programmazione Atmega328
Sì, esatto, sto parlando di quel progetto (http://searle.x10host.com/MonitorKeyboard/index.html). Grazie, sei stato abbastanza chiaro. Ma non ho capito se devo caricare sull' uC solo il file HEX...
Aspetto risposta,
Aspetto risposta,
Edoardo M. Scardamaglia
Re: Programmazione Atmega328
Da quanto capisco, di uC ce ne vogliono due, uno per il monitor e uno per la tastiera. E difatti nell'archizio ci sono due directory piu' una "obsoleta". In poiu', ma lo fanno AVRDUDE/AVRDUDESS, occorre programmare i "fusibili". Cito:
In AVRDUDESS, a circa meta' altezza sulla destra, ci sono le finestrelle per i "fusibili": "fuses & lock bits" e poi L, H e E (LB e' il "lock").Suitable fuse settings for the two controllers are as follows (please refer to datasheets for info)...
For the 328P interface chip:
Low: 0xFF
High: 0xD9
Extended: 0xFF
The 328P display chip must be set to rail-to-rail crystal operation, so the fuse bytes for that would be:
Low: 0xF7 (ie. CKSEL3 = 0)
High: 0xD9
Extended: 0xFF
-
- Messaggi: 100
- Iscritto il: sab 8 gen 2022, 16:01
- Località: Roma
Re: Programmazione Atmega328
Grazie per la risposta.
Sì, di uC ce ne vogliono due. Adesso supponiamo di voler programmare quello per la generazione del video, nel mio caso un 328p, che file devo usare per programmarlo? L'HEX? Gli ASM? Gli INC? Non ci capisco quasi niente di questo settore dell'elettronica...
Ti ringrazio per l'attenzione,
Sì, di uC ce ne vogliono due. Adesso supponiamo di voler programmare quello per la generazione del video, nel mio caso un 328p, che file devo usare per programmarlo? L'HEX? Gli ASM? Gli INC? Non ci capisco quasi niente di questo settore dell'elettronica...
Ti ringrazio per l'attenzione,
Edoardo M. Scardamaglia
Re: Programmazione Atmega328
Il file HEX, nel formato detto "Intel Hex", contiene il codice binario compilato del programma, ed e' quello che AVRDUDE deve leggere per programmare il microcontrollore. Per una spiegazione del formato:
https://en.wikipedia.org/wiki/Intel_HEX
In pratica, usando AVRDUDESS che e' una interfaccia grafica a AVRDUDE PER IL MICROCONTROLLORE DELLO SCHERMO:
- nel menu "Programmer (-c)" devi selezionare il programmatore di cui disponi, e subito sotto il porto a cui e' collegato;
- nel menu sotto "MCU (-p)" devi selezionare "ATMEGA328P";
- cliccando sul bottone [...] accanto alla linea sotto "Flash" devi selezionare il file SBCVideo.hex, "Write", e come "Format" il valore "Intel Hex";
- Nella sezione "Fuses & lock bits", devi scrivere accanto a "L" il valore "0xF7", accanto a "H" il valore "0xD9" e accanto a "E" il valore "0xFF";
A questo punto il bottone "Program" dovrebbe fare il mestiere, se il tuo programmatore e' collegato dove credi.
Per quanto riguarda i Flag, puoi leggere a che cosa servono cliccando sulla scritta "fuse settings" e selezionarli uno a uno cliccando sul bottone "Bit selector" - i lock bits dovrebbero essere tutti non settati e va bene cosi', nella riga di "LFUSE" devi deselezionare (mettere a zero) CKSEL3 come spiega l'autore (e cosi' arriva il valore "0xF7"), HFUSE mantiene il valore di 0xD9 ed EFUSE quello di 0xFF.
Per il microcontrollore della tastiera, il file HEX e' SBCInterface_328.hex se usi un ATMEGA328P (altrimenti c'e' la versione per ATMEGA88 e per ATMEGA168) e i "Fuses & lock bits" devono assumere i valori Low: 0xFF, High: 0xD9, Extended: 0xFF.
Da notare che il codice sorgente NON E' per la IDE di Arduino ma per Atmel Studio (versione 7 credo).
https://en.wikipedia.org/wiki/Intel_HEX
In pratica, usando AVRDUDESS che e' una interfaccia grafica a AVRDUDE PER IL MICROCONTROLLORE DELLO SCHERMO:
- nel menu "Programmer (-c)" devi selezionare il programmatore di cui disponi, e subito sotto il porto a cui e' collegato;
- nel menu sotto "MCU (-p)" devi selezionare "ATMEGA328P";
- cliccando sul bottone [...] accanto alla linea sotto "Flash" devi selezionare il file SBCVideo.hex, "Write", e come "Format" il valore "Intel Hex";
- Nella sezione "Fuses & lock bits", devi scrivere accanto a "L" il valore "0xF7", accanto a "H" il valore "0xD9" e accanto a "E" il valore "0xFF";
A questo punto il bottone "Program" dovrebbe fare il mestiere, se il tuo programmatore e' collegato dove credi.
Per quanto riguarda i Flag, puoi leggere a che cosa servono cliccando sulla scritta "fuse settings" e selezionarli uno a uno cliccando sul bottone "Bit selector" - i lock bits dovrebbero essere tutti non settati e va bene cosi', nella riga di "LFUSE" devi deselezionare (mettere a zero) CKSEL3 come spiega l'autore (e cosi' arriva il valore "0xF7"), HFUSE mantiene il valore di 0xD9 ed EFUSE quello di 0xFF.
Per il microcontrollore della tastiera, il file HEX e' SBCInterface_328.hex se usi un ATMEGA328P (altrimenti c'e' la versione per ATMEGA88 e per ATMEGA168) e i "Fuses & lock bits" devono assumere i valori Low: 0xFF, High: 0xD9, Extended: 0xFF.
Da notare che il codice sorgente NON E' per la IDE di Arduino ma per Atmel Studio (versione 7 credo).
-
- Messaggi: 100
- Iscritto il: sab 8 gen 2022, 16:01
- Località: Roma
Re: Programmazione Atmega328
Ok! Molto bene. Perché hai specificato che i file sorgente non sono compatibili con la IDE di Arduino? Questo creerà un "problema"?
Grazie davvero.
Grazie davvero.
Edoardo M. Scardamaglia
Re: Programmazione Atmega328
L'autore parla di Atmel Studio 7 come sistema di sviluppo. E' disponibile gratuitamente sul sito della Microchip (ovviamente conviene a chi vende microcontrollori che i potenziali clienti non scappino di fronte al costo dei sistemi di sviluppo...). E' quasi un gigabyte.
https://www.microchip.com/en-us/tools-r ... #Downloads
Confesso di non conoscerlo bene.
Nell'archivio .ZIP non trovo il codice sorgente per il micro che gestisce il video. Il file sorgente per la tastiera, se caricato nella IDE di Arduino, effettivamente compila per Arduino Nano e mi ha prodotto due file .hex su richiesta, ma il contenuto e' diverso da quello del file .hex per ATMEGA328P. Non escludo che funzioni, anzi e' probabile, ma se non funziona il debug mi sembra da incubo...
P.S.: per il Video, esiste il codice in Assembly.
https://www.microchip.com/en-us/tools-r ... #Downloads
Confesso di non conoscerlo bene.
Nell'archivio .ZIP non trovo il codice sorgente per il micro che gestisce il video. Il file sorgente per la tastiera, se caricato nella IDE di Arduino, effettivamente compila per Arduino Nano e mi ha prodotto due file .hex su richiesta, ma il contenuto e' diverso da quello del file .hex per ATMEGA328P. Non escludo che funzioni, anzi e' probabile, ma se non funziona il debug mi sembra da incubo...
P.S.: per il Video, esiste il codice in Assembly.
-
- Messaggi: 100
- Iscritto il: sab 8 gen 2022, 16:01
- Località: Roma
Re: Programmazione Atmega328
Ok, bene. Giuro che sono le ultime domande.![😂](//cdn.jsdelivr.net/gh/twitter/twemoji@latest/assets/svg/1f602.svg)
Il settore EEPROM non li devo "mettere" niente, no?
Con questo assembly che hai citato che devo fare?
Perché ci sono dei file INC (video)?
Grazie davvero,
Il settore EEPROM non li devo "mettere" niente, no?
Con questo assembly che hai citato che devo fare?
Perché ci sono dei file INC (video)?
Grazie davvero,
Edoardo M. Scardamaglia
Re: Programmazione Atmega328
I files .asm e .inc servono ad "assemblare" il programma per il micro che gestisce il video. In SBCVideo.asm c'e' una linea con la direttiva (e il commento)
che dice all'Assemblatore di includere nel codice il file Defs.inc che contiene tutte le definizioni di registri eccetera usate nel programma. Nel seguito ci sono le direttive
che a prima vista sembrerebbero contenere le bitmap per i vari font.
Il file .HEX e' il risultato della compilazione (assemblaggio?) tradotto in un formato ASCII perche' un tempo (ahime', ero giovane) i file si trasferivano tramite modem telefonici rumorosi e (a parte le varie checksum alla fine di ogni riga) qualche volta si riusciva a riparare un "danno" per telefono, "Pronto? La riga 101 non e' passata, me la leggi un carattere alla volta?". Adesso siamo abituati a scaricare a velocita' paurose ma io da qualche parte il mio modem a 300 BIT per secondo ce l'ho ancora...
Codice: Seleziona tutto
; include program specific definitions and macros
.include "defs.inc"
Codice: Seleziona tutto
.include "vidgen.inc" ; file that holds the video generation code
...
.include "ProcChr.inc"
...
.include "CGANormalFont.inc"
.include "CGANormalFontWide.inc"
.include "CGABoldfont.inc"
.include "CGABoldFontWide.inc"
.include "BlockFont.inc"
Il file .HEX e' il risultato della compilazione (assemblaggio?) tradotto in un formato ASCII perche' un tempo (ahime', ero giovane) i file si trasferivano tramite modem telefonici rumorosi e (a parte le varie checksum alla fine di ogni riga) qualche volta si riusciva a riparare un "danno" per telefono, "Pronto? La riga 101 non e' passata, me la leggi un carattere alla volta?". Adesso siamo abituati a scaricare a velocita' paurose ma io da qualche parte il mio modem a 300 BIT per secondo ce l'ho ancora...