Attiny e Seriale

Ciao a tutti, ho un attiny programmato per lavorare a clock interno a 8 Mhz… (O almeno io così ho selezionato la board e gli ho fatto Burn Bootloader)…
Ho caricato gli sketch di prova con i vari blink e non ci sono problemi…
Sto cercando di buttarci su una seriale emulata ma penso di sbagliare qualcosa a livello software…
Ho l’IDE 1.0.1 e il codice è questo:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
void setup()  
{
  mySerial.begin(9600);
}

void loop()
{
  if (mySerial.available()){
    mySerial.write((char)mySerial.read());
  }
}

Solo che mi restituisce caratteri strani sul monitor… Se invio numeri singoli me li restituisce uguale “1, 2, 3 ecc” già se invio tipo “12” mi torna indietro un carattere… Con le lettere uguale è ancora peggio…
Dove sbaglio? <.< Che sia il seriale → usb che fa pietà?

Prova a fare myserial.print((char)... Invece che write

E poi metti i pin della seriale non sulla 0 e l'1..sono già occupati probabilmente x la seriale fisica

Provo subito… Fidentino?? Aiaaa lo sapevo che avevo il vicino di casa patito d’arduini!!
http://www.guglio.net/ArduMAP

Ciao magari metti uno sleep di qualche ms, alcune seriali voglio due bit di stop (linea ad 1 logico) e scrivere a manetta i dati potrebbe creare qualche casino..

Intanto che Attiny stai usando?
Che versione del core Tiny usi? Ricordati che se non hai l'ultima 0100-0015, la SoftwareSerial non funziona correttamente con questi chip.

Poi che sketch usi per i test?

Parmigiano importato a Fidenza:-) :slight_smile: si potrebbe fare una reunion a Parma su Arduino:-) :slight_smile: :slight_smile: workshop?? :slight_smile:

La 1.0.1 ha un bug nel serial monitor. Usa la 1.0.3 oppure la lingua inglese.

Non ho ben capito come hai settato i fuse dell’attiny per lavorare a 8MHz; a prescindere dai valori che non dici, diamo per scontato che siano corretti, tu scrivi

almeno io così ho selezionato la board e gli ho fatto Burn Bootloader

; che io sappia con i tiny il metodo del burn bootloader non setta i fuse, temo dovrai ricorrere ad AVRDUDE…

Forse le ultime versioni del core Tiny hanno risolto questo problema. Dovrei fare dei test, perché sinceramente non ho mai fatto uso della scrittura del finto bootloader per programmare i fuse dei Tiny, almeno non nell’ultimo anno e mezzo.

eh sì, una prova va fatta, su questo dobbiamo aggiornarci, se funzionasse sarebbe cosa ottima....

Ciao ragazzi, scusatemi ma fra parenti ed organizzaz x l'ultimo penso di non saltarci fuori!!
Anche a me sembrava strano di poter settare i fuse semplicemente con "burn bootloader", c'è modo di sapere se la scheda sta lavorando a 8 o a 1 Mhz con uno sketch?
Penso poi riproverò tutto con la vecchia 0023, che è quella che di solito uso anche per programmare l'Arduino visto che la 1.0.1 non mi fa cambiare il baudrate, poi con questi continui cambi di librerie e di funzioni mi viene il nervoso perchè non faccio altro che riadattare vecchi sketch che con la 1.0.1 non vanno.

Guglio passa alla 1.0.3. :wink:

Guglio:

  1. l'IDE 1.0.1 ha un bug ormai noto sul menu a tendina del monitor seriale dove selezioni la relativa velocità. Tale bug è stato risolto con le versioni successive. Continuare ad usare la versione 002x va bene se devi adoperare librerie abbandonate e/o obsolete ma se usi librerie sviluppate attivamente, la scelta migliore è l'ultima versione dell'IDE.
  2. la procedura che avvii quando scegli "Strumenti/Scrivi bootloader" nell'IDE è in pratica una cancellatura totale del microcontrollore ed un suo settaggio completo. Con quella voce viene istruito avrdude non solo a flashare il bootloader ma anche, prima di questa scrittura, ad impostare i fuse del microcontrollore affinché poi lavori come è stato stabilito nel file boards.txt. Con il core Tiny viene usato un finto bootloader: si tratta in pratica di un file vuoto che non scrive niente sulla flash: viene usato solo per sfruttare il comportamento appena descritto dell'IDE. C'è un però: fino alla versione 002x del core Tiny tale operazione non funzionava, nel senso che non si programmava un bel nulla, quindi né bootloader (finto, ripeto) né, tantomeno, i fuse.
  3. per sapere se un micro va ad 8 o ad 1 MHz hai 3 modi:
    3.1) se il micro è nuovo, arrivato direttamente dalla fabbrica Atmel, va sicuramente ad 1 MHz: questa è la frequenza di fabbrica di tutti i micro Atmega e Attiny
    3.2) se hai un micro già programmato puoi usare avrdude per leggere il valore dei fuse e sapere come è impostato il micro, per sapere cioè se usa un clock esterno o l'oscillatore interno
    3.3) flashi il Blink compilato ad 1 MHz: se lampeggia correttamente a 1 Hz il micro va ad 1 MHz, se lo vedi lampeggiare più velocemente, il chip è settato a 8 MHz.

leo72:

[quote author=Michele Menniti link=topic=139007.msg1045684#msg1045684 date=1356560435]
Non ho ben capito come hai settato i fuse dell'attiny per lavorare a 8MHz; a prescindere dai valori che non dici, diamo per scontato che siano corretti, tu scrivi

almeno io così ho selezionato la board e gli ho fatto Burn Bootloader

; che io sappia con i tiny il metodo del burn bootloader non setta i fuse, temo dovrai ricorrere ad AVRDUDE...

Forse le ultime versioni del core Tiny hanno risolto questo problema. Dovrei fare dei test, perché sinceramente non ho mai fatto uso della scrittura del finto bootloader per programmare i fuse dei Tiny, almeno non nell'ultimo anno e mezzo.
[/quote]
se funzionasse questa cosa sarebbe molto interessante e comoda soprattutto :wink:

Confermo che con l'IDE 1.0.3 ed il core Tiny 0100-0015 la scrittura del finto bootloader sui chip Tiny cambia il valore dei fuse del micro.
Provato or ora con un Tiny84.

leo72:
Confermo che con l'IDE 1.0.3 ed il core Tiny 0100-0015 la scrittura del finto bootloader sui chip Tiny cambia il valore dei fuse del micro.
Provato or ora con un Tiny84.

molto bene, grazie per l'info :wink:

leo72:
Confermo che con l'IDE 1.0.3 ed il core Tiny 0100-0015 la scrittura del finto bootloader sui chip Tiny cambia il valore dei fuse del micro.
Provato or ora con un Tiny84.

Ottimo, ma io sono ancora all'1.0.1 :sweat_smile: a proposito della quale ricordo che il famoso bug del baud rate NON si verifica se si imposta la lingua inglese invece di quella italiana :smiley:

Motivo per cui devi passare alla 1.0.3

Sono riuscito a programmare un ATtiny4313 a 8 Mhz con la tecnica ISP. Ho riscritto il bootloader per cambiare i fuse e poi il blink che lampeggia a intervalli di 1 secondo.
Ho dovuto tribolare non poco con nuove toolchain e modifiche ai core del tiny, ma tutto è andato bene.

Vorrei sapere se il 4313 ha un bootloader con cui sia possibile la programmazione via seriale. (anche se comporterebbe la perdita di spazio preziosissimo)

Non c’è bootloader. Considera anche che i Tiny non hanno la seriale HW per cui un eventuale bootloader che scriva lo sketch porterebbe via molto più spazio dell’Optiboot dato che la parte di comunicazione seriale andrebbe implementata in SW.