Topic permanente di programmazione newbie

Menniti, non credo che basti solo cambiare il nome al 2313 in 4313 e incollare, questo è un estratto dal mio avrdude.conf

#------------------------------------------------------------
# ATtiny4313
#------------------------------------------------------------

part
     id            = "t4313";
     desc          = "ATtiny4313";
     has_debugwire = yes;
     flash_instr   = 0xB2, 0x0F, 0x1F;
     eeprom_instr  = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
	             0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
	             0x99, 0xE1, 0xBB, 0xAC;
     stk500_devcode   = 0x23;
##   Use the ATtiny26 devcode:
     avr910_devcode   = 0x5e;
     signature        = 0x1e 0x92 0x0d;
     pagel            = 0xD4;
     bs2              = 0xD6;
     reset            = io;
     chip_erase_delay = 9000;

     pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                        "x x x x  x x x x    x x x x  x x x x";

     chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 x  x x x x",
                        "x x x x  x x x x    x x x x  x x x x";

    timeout		= 200;
    stabdelay		= 100;
    cmdexedelay		= 25;
    synchloops		= 32;
    bytedelay		= 0;
    pollindex		= 3;
    pollvalue		= 0x53;
    predelay		= 1;
    postdelay		= 1;
    pollmethod		= 1;

    pp_controlstack     =
        0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
        0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
        0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
        0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg           = 1;
    poweroffdelay       = 15;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

     memory "eeprom"
         size            = 256;
        paged           = no;
        page_size       = 4;
         min_write_delay = 4000;
         max_write_delay = 4500;
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read            = "1   0  1  0   0  0  0  0   0 0 0 x  x x x x",
                           "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";

         write           = "1   1  0  0   0  0  0  0   0 0 0 x  x x x x",
                           "a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";

	loadpage_lo	= "  1   1   0   0      0   0   0   1",
			  "  0   0   0   0      0   0   0   0",
			  "  0   0   0   0      0   0  a1  a0",
			  "  i   i   i   i      i   i   i   i";

	writepage	= "  1   1   0   0      0   0   1   0",
			  "  0   0   x   x      x   x   x   x",
			  " a7  a6  a5  a4     a3  a2   0   0",
			  "  x   x   x   x      x   x   x   x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 4;
	readsize	= 256;
       ;
     memory "flash"
         paged           = yes;
         size            = 4096;
         page_size       = 64;
         num_pages       = 64;
         min_write_delay = 4500;
         max_write_delay = 4500;
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read_lo         = "  0   0   1   0    0   0   0   0",
                           "  0   0   0   0    0 a10  a9  a8",
                           " a7  a6  a5  a4   a3  a2  a1  a0",
                           "  o   o   o   o    o   o   o   o";

         read_hi         = "  0   0   1   0    1   0   0   0",
                           "  0   0   0   0    0 a10  a9  a8",
                           " a7  a6  a5  a4   a3  a2  a1  a0",
                           "  o   o   o   o    o   o   o   o";

# The information in the data sheet of April/2004 is wrong, this works:
         loadpage_lo     = "  0   1   0   0    0   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x   x   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

# The information in the data sheet of April/2004 is wrong, this works:
         loadpage_hi     = "  0   1   0   0    1   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x   x   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

# The information in the data sheet of April/2004 is wrong, this works:
         writepage       = "  0  1  0  0   1   1  0  0",
                           "  0  0  0  0   0 a10 a9 a8",
                           " a7 a6 a5 a4   x   x  x  x",
                           "  x  x  x  x   x   x  x  x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 32;
	readsize	= 256;
       ;
#   ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D.
     memory "signature"
         size            = 3;
         read            = "0  0  1  1   0  0  0  0   0  0  0  x   x  x  x  x",
                           "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
       ;
     memory "lock"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 1 1 x  x x x x",
                           "x x x x  x x x x  1 1 i i  i i i i";
         read           = "0 1 0 1  1 0 0 0  0 0 0 0  0 0 0 0",
                          "x x x x  x x x x  x x o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "lfuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 0 0 0",
                           "x x x x  x x x x  i i i i  i i i i";

         read            = "0 1 0 1  0 0 0 0  0 0 0 0  0 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "hfuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  1 0 0 0",
                           "x x x x  x x x x  i i i i  i i i i";

         read            = "0 1 0 1  1 0 0 0  0 0 0 0  1 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "efuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
                           "x x x x  x x x x  x x x x  x x x i";

         read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
     ;
# The Tiny4313 has calibration data for both 4 MHz and 8 MHz.
# The information in the data sheet of April/2004 is wrong, this works:

     memory "calibration"
         size            = 2;
         read            = "0  0  1  1   1  0  0  0    0 0 0 x  x x x x",
                           "0  0  0  0   0  0  0  a0   o o o o  o o o o";
     ;
  ;

la maggiorparte dei parametri sono uguali,ma non tutti.
Poi basta che ti crei la board per l'ide e hai finito.
L'opzione -F per avrdude potrebbe aiutare se il chip è sbrickato ed ha solo la signature danneggiata e nient'altro.
L'ide richiamando avrdude con i parametri di default (senza -F per esempoi) non può programare un chip con la signature divera da quella attesa (salvo modifiche).

Io uso la 0022, forse il tuo CONF è più aggiornato, ora provo a copiare questi dati nel mio conf e vediamo che succede. Grazie

Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice

mcu attiny4313 supported for assembler only

e

unknown MCU 'attiny4313' specified
Known MCU names:
avr2
at90s2313

che manca? ma tu, bb, l'hai mai provata questa mcu, intendo dire che basta selezionarla e fare un banale compilazione del blick per sapere se ti funziona o meno

menniti:
Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice
mcu attiny4313 supported for assembler only

Questo non è un errore di avrdude, è del GCC, ti dice che non riconosce quel micro e che non può compilare.

astrobeed:

menniti:
Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice
mcu attiny4313 supported for assembler only

Questo non è un errore di avrdude, è del GCC, ti dice che non riconosce quel micro e che non può compilare.

Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

menniti:
Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

Non puoi farlo, è necessario eseguire l'upgrade del compilatore per risolvere.

astrobeed:

menniti:
Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

Non puoi farlo, è necessario eseguire l'upgrade del compilatore per risolvere.

Ottimo, allora faccio come il vecchio cinese, mi siedo davanti al PC e aspetto, qualcosa accadrà :slight_smile: per il momento il 4313 può aspettare anche lui e tornare nel cassetto.

menniti:
Ottimo, allora faccio come il vecchio cinese, mi siedo davanti al PC e aspetto, qualcosa accadrà :slight_smile: per il momento il 4313 può aspettare anche lui e tornare nel cassetto.

Ho verificato, il compilatore 4.3.2 abbinato all'IDE di Arduino non prevede il 4313, è previsto nella 4.3.3 che trovi nell'ultima release di WinAvr.
Possibile soluzione indolore, non è detto che funzioni e adesso non ho tempo per provare, però se ti va di perderci un po di tempo prova a scaricare l'ultima relase di WinAvr, esegui l'installazione, si limita ad espandere i contenuti, dopo di che cancella il contenuto della cartella "..\arduino-0023\hardware\tools\avr" e copiaci dentro tutto quello presente nella cartella WinAvr, dovresti trovarla in "C:\Programmi\Atmel\WinAvr", esclusa la cartella avr32 che non ti serve.
Fatto quanto sopra dovresti avere l'IDE aggiornato al compilatore 4.3.3 che include il 4313.

astrobeed:

menniti:
Ottimo, allora faccio come il vecchio cinese, mi siedo davanti al PC e aspetto, qualcosa accadrà :slight_smile: per il momento il 4313 può aspettare anche lui e tornare nel cassetto.

Ho verificato, il compilatore 4.3.2 abbinato all'IDE di Arduino non prevede il 4313, è previsto nella 4.3.3 che trovi nell'ultima release di WinAvr.
Possibile soluzione indolore, non è detto che funzioni e adesso non ho tempo per provare, però se ti va di perderci un po di tempo prova a scaricare l'ultima relase di WinAvr, esegui l'installazione, si limita ad espandere i contenuti, dopo di che cancella il contenuto della cartella "..\arduino-0023\hardware\tools\avr" e copiaci dentro tutto quello presente nella cartella WinAvr, dovresti trovarla in "C:\Programmi\Atmel\WinAvr", esclusa la cartella avr32 che non ti serve.
Fatto quanto sopra dovresti avere l'IDE aggiornato al compilatore 4.3.3 che include il 4313.

grazie, provo subito, sono curioso, anche perché se va a buon fine mi troverò altri possibili micro in elenco

Possibile che non riesco a trovare WINAVR sul sito Atmel? :fearful:

http://winavr.sourceforge.net/download.html

Ciao
QP

ma hai chiamato il 4313 con il nome giusto nella board?(t4313)

BrainBooster:
ma hai chiamato il 4313 con il nome giusto nella board?(t4313)

ho provato ora per scrupolo, ma anche l'attiny2313 viene scritto per intero, ecco perché dico che il nome deve essere altrove, come giustamente dice Astro.

@ QP: grazie, me lo dà come primo link ma mi era sembrato un po' sospetto :fearful: oltretutto mi dà in ftp una cartella zeppa di versioni, scarico l'ultima?

Si. Ossia questa http://sourceforge.net/projects/winavr/files/WinAVR/20100110/

Ciao
QP

Fatto, ma ho lo stesso errore, forse non è sufficiente questa manovra di sostituzione della cartella avr e comunque nell'AVRDUDE.CONF nuovo il 4313 non c'è, ho visto che aprendo il makefile l'mcu appare, ma davvero non so come integrarlo, ed è un peccato non riuscirci perché ci sono altri micro che mi interessano come gli attyny 88 e 861; gli 861 sono molto simili ai 2313, abbastanza da poter tentare di partire da questi per aagiungere i dati nel core e creare la relativa board.
Per il momento lascio installato il winavr e ripristino la vecchia versione della cartella, poi se mi suggerite idee o se fate qualche tentativo tenetemi aggiornato.

menniti:
Fatto, ma ho lo stesso errore, forse non è sufficiente questa manovra di sostituzione della cartella avr e comunque nell'AVRDUDE.CONF nuovo il 4313 non c'è

Impossibile che ti da lo stesso errore perché la versione 4.3.3 di AVRGCC prevede il 4313, l'ho verificato.

Queste sono le prime righe del suo file .h di configurazione:

/* Copyright (c) 2009 Atmel Corporation
   All rights reserved.

/* $Id: iotn4313.h,v 1.1.2.2 2009/11/02 02:44:17 arcanum Exp $ */

/* avr/iotn4313.h - definitions for ATtiny4313 */

/* This file should only be included from <avr/io.h>, never directly. */

#ifndef _AVR_IO_H_
#  error "Include <avr/io.h> instead of this file."
#endif

#ifndef _AVR_IOXXX_H_
#  define _AVR_IOXXX_H_ "iotn4313.h"
#else
#  error "Attempt to include more than one <avr/ioXXX.h> file."
#endif 


#ifndef _AVR_ATtiny4313_H_
#define _AVR_ATtiny4313_H_ 1

edit: forse il problema è nel nome che usi per il micro che non è quello atteso dal compilatore.

sarebbe questo che hai postato tu? AVR_ATtiny4313_H oppure dove lo trovo?

menniti:
sarebbe questo che hai postato tu? AVR_ATtiny4313_H oppure dove lo trovo?

No questo è il nome simbolico usato nel file di descrizione, non ha nulla a vedere con quanto atteso dal compilatore sulla riga di comando, mi pare che c'è una opzione che fornisce la lista dei micro supportati e il nome da utilizzare, devo dare un attimo una sbirciatina al manuale del gcc.

Ho fatto al volo una prova sostituendo AvrWin con l'ultima versione come ti avevo detto, nome cpu ".mcu=attiny4313" e il compilatore lo accetta, però poi viene fuori una serie di errori perché il core non è adatto per il micro, quindi la questione supporto del compilatore è risolta, ora tocca risolvere il problema core.

attima la scoperta della signature sbiellabile.
Menny scopri cose interessanti anche quando sbagli :slight_smile:

quind l'idea del menu' Proteggi Micro e' accettata ?

qualcuno sa niente del discorso di cancellare solo il bootloader ? giusto per didattica, lo sketch non partirebbe giusto ?
Non basterebbe cancellare solo il primo byte della flash ?