AtMega328 con oscillatore interno 8Mhz

Salve a tutti.
Vorrei sapere come far funzionare un Atmega 328 senza oscillatore esterno , ma usando quello interno da 8Mhz ..Siccome sto usando l'Atmega dell'aurduino Uno sulla BreadBoard esternamente e sono sprovvisto di un Quarzo a 16Mhz ...Volevo usare il suo interno...come impostarlo???
Grazie in anticipo

Da quello che so devi installare un altro bootloader visto che quello dell'uno è programmato per usare un oscillatore esterno. Se non sbaglio si chiama lilypad!

Oltre al bootloader vanno cambiati i fuse del microcontrollore per attivare l'oscillatore interno.
E per far ciò è necessario un programmatore.

Devi cambiare il bootloader perché é tarato per i 16MHz. Devi mette uno di un Arduino a 8 Mhz. Se usi quello interno per 8Mhz le funzioni che usano il tempo vanno sbagliate.
Per settare il tipo di clock devi settare dei fuse bit. Questo si fa con un programmatore ISP.

http://arduino.cc/en/Tutorial/ArduinoToBreadboard a metá pagina é descritto.

Ciao Uwe

Salve riprendo questo topic di un paio di mesi fa, per un problema simile.
Ho scritto uno sketch che voglio far funzionare su un ATmega328 in stand alone a 8MHz
Ho inserito nel file board.txt le righe copiate dal file breadboard.zip indicato qui:

Ho tolto il chip da Arduino e collegato Reset, TX, RX, GND e 5V tra Arduino e la breadboard in cui è montato il chip in modalità "minima", esattamente come indicato nel tutorial ufficiale (ho provato anche senza Reset e col condensatore), ma quando invio lo sketch mi dà il solito errore di "sync".
In precedenza avevo provato anche caricato il bootloader di lilypad con 328 sul chip.
Potete darmi qualche indicazione in più?

Il metodo RX/TX non funziona con le schede Uno.
Quel file ZIP non va bene per un Atmega con bootloader Uno.

leo72:
Il metodo RX/TX non funziona con le schede Uno.

Non è vero, io l'ho fatto funzionare e lo sto spiegando nel mio tutorial.

Quel file ZIP non va bene per un Atmega con bootloader Uno.

al limite potrei fare le prove con la 2009, ma preferirei risolvere con le nuove tecniche :wink:

RX/TX: ah, non lo sapevo.

Devi modificare il nome del bootloader, che per le schede Uno è divenuto l'Optiboot. Inoltre devi rivedere i fuse perché il bootloader della 2009 occupava 1,5 kB mentre l'Optiboot occupa 0,5 kB. Il tutto devi farlo con Fuse Calc.

Allora ho modificato il path (il nome era giusto) del file originale, per fargli trovare ciò che cerca:

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xD9
atmega328bb.bootloader.extended_fuses=0x07
atmega328bb.bootloader.path=atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino

ho applicato la tecnica seriale ma continua a dare errori; ma possibile che tutti questi tutorial ufficiali siano errati? non riesco a crederci! Tra boootloader e sketch, finora non ce n'è stato uno che applicato alla lettera abbia funzionato, ma ovviamente LORO li hanno provati, sarei curioso di capire perché a loro abbiano funzionato e a noi no!
Comunque quello che noto è che loro cambiano tutti i fuse ed anche il clock, non vorrei che anche con la tua tecnica vadano fatte tutte queste modifiche. :astonished:

Yeah!!!!! XD XD XD XD XD $) $) $) $) $) Ce l'ho fatta! 8)
Ho dovuto modificare le righe di leo nel file boards.txt, ho proprio creato una nuova board "stand alone 8MHz", con questi valori:

##############################################################

mega3288.name=ATmega in Stand Alone 8MHz internal clock (w/ Arduino as ISP)
mega3288.upload.protocol=stk500
mega3288.upload.maximum_size=32256
mega3288.upload.speed=115200
mega3288.upload.using=arduino:arduinoisp
mega3288.bootloader.low_fuses=0xe2
mega3288.bootloader.high_fuses=0xd9
mega3288.bootloader.extended_fuses=0x07
mega3288.bootloader.path=optiboot
mega3288.bootloader.file=optiboot_atmega328.hex
mega3288.bootloader.unlock_bits=0x3F
mega3288.bootloader.lock_bits=0x0F
mega3288.build.mcu=atmega328p
mega3288.build.f_cpu=8000000L
mega3288.build.core=arduino

Inviando tramite la tecnica ISP di leo (anche se io ho modificato la procedura, ma non cambia nulla!) prima il bootloader di questa board e poi lo sketch che mi serviva, il chip ha funzionato regolarmente.
La cosa merita un paragrafo nel tutorial che ormai è come la tela di Penelope :wink:
Grazie leo, con la tua tecnica iniziale hai aperto davvero nuovi orizzonti $)

Sei sicuro??
Io ho fatto una prova prima di cena con una configurazione simile, l'unica cosa che cambiava erano i fuse alto ed esteso:
low: e2
high: dc
ext: fd

Ed il LED non si accendeva....
Con i tuoi parametri, Fuse Calc mi dice che hai messo lo spazio del bootloader a 2048...

Forse la differenza la fa l'aver flashato prima il bootloader, cosa che io non ho fatto. Probabilmente l'IDE di Arduino modifica anche i fuse durante l'operazione di flash del bootloader, operazione che forse non compie quando uploada uno sketch normale. E qui allora torna il discorso che facevo io sull'altro post dove dicevo appunto che uploadare uno sketch non dovrebbe sovrascrivere il bootloader.

Domanda: ma il bootloader come lo carichi?
Se cerco di caricarlo sull'Atmega esterno usando ArduinoISP, l'IDE mi da errore.

Forse tu carichi il bootloader sulla Uno, poi smonti il micro e lo programmi sulla breadboard?

Allora, io non ho fatto molte prove dopo che ha funzionato, ti dico però che:
i fuses vanno modificati tutti e tre; riguardo l'extended cnel calc c'è questa nota "* Note that some numerical values refer to fuses containing undefined bits (set to '1' here). Depending on the target device these fuse bits will be read either as '0' or '1'. Verification errors will occur if the values are read back with undefined bits set to '0'. Everything is fine if the values read from the device are either the same as programmed, or the following values (undefined set to '0'): Extended: 0x07."
Ad un primo tentativo mi è proprio uscito un errore che finiva più o meno con: 0xfd:!0x07, quindi ho dedotto....
Ti confermo che devi caricare prima il bootloader della stessa board, altrimenti ti carica lo sketch ma poi non funziona.
Ti dò un aggiornamento, con il low_fuse a 0x62 il circuito funziona anche ad 1MHz, inoltre l'ho alimentato a 3,3V, risultato: il consumo del circuito è di 2,6mA in stand-by, a 5v e 8MHz era di circa 13mA, non oso pensare al circuito a 16Mhz... :wink:

leo72:
Domanda: ma il bootloader come lo carichi?
Se cerco di caricarlo sull'Atmega esterno usando ArduinoISP, l'IDE mi da errore.

Forse tu carichi il bootloader sulla Uno, poi smonti il micro e lo programmi sulla breadboard?

No, no, ho provato prima a caricarlo Arduino-Arduino e poi a togliere il chip e metterlo sulla bread, visto che andava a buon fine ho fatto la prova direttamente sulla bread e va che è una meraviglia.
Però, c'è stato un caso in cui mi ha dato un errore durante il caricamento dello sketch (avevo sbagliato io...), dopo non sono riuscito più a sistemare il chip sulla bread, ho dovuto ricollegare i due Arduino, per rimettere il bootloader a 8MHz.
Quindi l'unico limite è questo, ma scoperta la tecnica perché sbagliare, io l'ho fatto per avere le controprove.
Il primo caricamento di bootloader lo devi fare sul circuito a 16MHz, se il chip è "usato", non ho fatto prove col chip vergine.

Ma a me usando un chip "sverginato" non va.
Prima da un errore di comparazione: 0xfd != 0x05, poi mettendo 0x05 la procedura va avanti un po' ma si ferma e ricevo un errore di mancata risposta dal programmatore, segno che avrdude si "accorge" che sto usando un accrocchio che non è un programmatore....

Adesso proverò a riflashare il bootloader sul micro montato sulla Uno e poi a spostarlo sulla breadboard.

PS:
mettendo il fuse basso a 0x62 abiliti quel divisore x8 di cui ho detto tante volte e che serve appunto a dividere il clock interno a 1 MHz.
Gli Attiny, ad esempio, escono tutti con l'oscillatore interno abilitato ed il disivore on, per cui lavorano tutti a 1 MHz.

Dipende dai compiti, alle volte può bastare anche 1 MHz: se devi leggere un sensore 1 volta all'ora, ad esempio, non penso che faccia molta differenza avere il micro "lumaca" :wink:

Ho dovuto riprogrammare il bootloader con l'USBtinyISP. Si era incartato e non c'era più verso di programmarlo con l'Arduino UNO....

Aspetto che tu pubblichi il metodo che hai scoperto per fare altre prove.... per oggi ho già dato... ho il cervello cotto :astonished:

leo72:
Ma a me usando un chip "sverginato" non va.
Prima da un errore di comparazione: 0xfd != 0x05, poi mettendo 0x05 la procedura va avanti un po' ma si ferma e ricevo un errore di mancata risposta dal programmatore, segno che avrdude si "accorge" che sto usando un accrocchio che non è un programmatore....
Adesso proverò a riflashare il bootloader sul micro montato sulla Uno e poi a spostarlo sulla breadboard.

Penso sia la cosa migliore, io la prova non l'ho fatta sul chip vergine ma a logica si comporta come se avesse un "errore a bordo" quindi la prima volta (è vergine, ci vuole delicatezza e riguardo ;)) devi usare Arduino, poi non avrai più problemi.

PS:
mettendo il fuse basso a 0x62 abiliti quel divisore x8 di cui ho detto tante volte e che serve appunto a dividere il clock interno a 1 MHz.
Gli Attiny, ad esempio, escono tutti con l'oscillatore interno abilitato ed il disivore on, per cui lavorano tutti a 1 MHz.
Dipende dai compiti, alle volte può bastare anche 1 MHz: se devi leggere un sensore 1 volta all'ora, ad esempio, non penso che faccia molta differenza avere il micro "lumaca" :wink:

Sì, infatti me l'avevi detto e per questo ho fatto la prova, il sensore è per un antifurto, ho notato che a 1MHz e 3,3V il software dà i numeri, ma penso che "tarandolo" riesco a ottenere un buon risultato, ma per stasera non ne faccio più prove, questa cosa mi ha davvero stressato!
Dunque, ora compro gli ATtiny, penso che consumeranno ancora meno dell'ATmega, che ne dci? A proposito, prima di fare una c.zz.t. quale tipo devo comprare affinché possa andare a colpo sicuro con la tecnica ISP?
Io ora sto usando dei led per verificare ingressi e uscite ma nel circuito finale ci saranno: ATtiny, relé reed 5v, regolatore a 3,3v (forse), una res, un diodo, un transistor per pilotare il rele, avrò bisogno di un ingresso e un'uscita, nient'altro, non penso ci siano particolari problemi, che dici?

leo72:
Ho dovuto riprogrammare il bootloader con l'USBtinyISP. Si era incartato e non c'era più verso di programmarlo con l'Arduino UNO....

Aspetto che tu pubblichi il metodo che hai scoperto per fare altre prove.... per oggi ho già dato... ho il cervello cotto :astonished:

A chi lo dici!? :sweat_smile:
Ora mollo tutto e da domani mi metto di buona lena per finire il tutorial, ho un casino di roba da scrivere, per fortuna ho fatto già tutte le foto, anche se ora me ne serve qualcun'altra per la breadboard minimal.
Se puoi rispondi al mio precedente post, riguardo il tipo di ATtiny, comunque ti ringrazio di cuore, senza il tuo preziosissimo aiuto sarei dovuto ritornare al circuito elettronico, che ormai stava anche andando bene, però troppi componenti, oltre a 2 IC cmos, invece così farò uno schedino davvero mignon!

Di Attiny da consigliarti che possano andare con l'IDE e la tecnica della programmazione ISP ci sono:
-Attiny45/85
-Attiny2313/4313
-Attiny44/84
Dei primi sai ormai vita/morte/miracoli. E' da loro che ho sviluppato la mia tecnica di programmazione.
Sono micro molto compatti: DIP8, clock interno a 1 o 8 MHz. Hanno alcuni difettucci: USART non supportata via hardware ma funziona la NewSoftSerial con qualche modifica. I2C nelle stesse condizioni: funziona usando un emulatore software. Però se hai bisogno di bassi consumi, ridotto ingombro e di soli 2 pin (ne ha 6 in totale liberi), può fare al caso tuo. Ah, 4/8 kB di flash.

Gli Attiny2313 e 4313 sono un altro tipo di micro che potrebbero fare al caso tuo. DIP20, quindi leggermente più grandicelli, e dovrebbero funzionare con l'IDE (non li ho provati, non ce l'ho). Supportano l'USART ma non l'I2C, però hanno lo stesso bus universale programmabile come gli Attiny45/85 quindi in teoria dovrebbero permettere l'I2C con lo stesso sistema. Hanno un grosso difetto: solo 2/4 kB di flash, veramente poca.

Gli ultimi, sono quelli che mi stanno interessando ultimamente. DIP14, quindi una via di mezzo fra i precedenti, supportati dalle librerie TinyCore (quindi usabili con l'IDE di Arduino), hanno 4/8 kB di flash. Non hanno l'I2C hardware però hanno lo stesso sistema dei precedenti. Sarebbero da provare, per lo meno per la memoria doppia rispetto ai vetusti AttinyX313.

Ripeto, se però devi usare solo 2 pin, un Attiny45/85 io dico ti basta e avanza.

Sì, due pin ed un paio di k di sketch, per questa applicazione, per il resto faccio riferimento al tuo tutorial, non devo fare dell'"industriale", semplicemente 7 schedini per poter dormire la notte in pace e non rischiare di morire di crepacuore per i falsi allarmi dei miei sensori di tapparelle.
Sto lavorando alacremente alla nuova Guida, non voglio far perdere il lavoraccio che abbiamo fatto ieri :sweat_smile: :sweat_smile: :sweat_smile:, quindi preferisco prendermi qualche giorno in più ma fare un lavoro completo.
Grazie ancora! :wink: