«

»

nov 11 2013

Guida all’utilizzo dei micro tinyAVR con l’IDE Arduino 1.5.x

attiny84Nuova versione della guida per l’utilizzo dei micro tinyAVR con l’IDE di Arduino. Questa nuova versione nasce sul forum di Arduino grazie alla collaborazione con l’utente PaoloP. La guida è scritta per poter utilizzare i micro supportati dal core Tiny (attualmente i chip ATtiny25/45/85, ATtiny24/44/84, ATtiny2313/4313) con l’ultima versione dell’IDE, la 1.5.4.

La guida è scaricabile da qui.

Guida Attiny 1.5-04
Guida Attiny 1.5-04
guida_attiny_1.5-04-2.zip
Versione: 1.5.4
1.9 MiB
562 Downloads
Dettagli...

10 comments

Vai al modulo dei commenti

  1. marcoveronelli

    salve, ho un po di problemi con questa libreria… caricata sull’attiny, precisamente attiny84, mi trovo con i “pin arduino” completamete al contrario, il “10″ (dobrebbe essere PB0) è 1 e viceversa, in pratica l’opposto di questo :
    http://blog.protoneer.co.nz/wp-content/uploads/2013/05/attiny_44_84_Pinout.png
    e in + non riesco ad attivare la Aref Esterna, rimane sempre a 1.1V
    Avresti qualche suggerimento in merito?
    con l’85 non ho avuto problema alcuno, non ho provato la Aref esterna in quanto non mi serviva, ma i pin erano corrispondenti.

  2. Leonardo Miliani

    Stiamo parlando del core Tiny, non di una libreria fatta da me. La piedinatura è quella utilizzata dal core stesso:

    // ATMEL ATTINY84 / ARDUINO
    //
    // +-\/-+
    // VCC 1| |14 GND
    // (D 0) PB0 2| |13 AREF (D 10)
    // (D 1) PB1 3| |12 PA1 (D 9)
    // PB3 4| |11 PA2 (D 8)
    // PWM INT0 (D 2) PB2 5| |10 PA3 (D 7)
    // PWM (D 3) PA7 6| |9 PA4 (D 6)
    // PWM (D 4) PA6 7| |8 PA5 (D 5) PWM
    // +----+

    Purtroppo quella riportata sulla scheda di Pighixxx che hai linkato non corrisponde a questa, per cui è normale che tu veda i pin invertiti. Sull’Aref devo fare dei test (come detto il core non è mio, io ho provveduto solo a creare tutto il pacchetto con i file di supporto all’IDE) ma in caso fosse come dici tu andrebbe segnalata la cosa al link che ti ho segnalato all’inizio di questo reply.

  3. marcoveronelli

    grazie della risposta. so che il core non è “tuo” ma da qui l’ho scaricato, per quello ho chiesto qui :)
    la cosa dei pin “invertiti”, vabbe non è un dramma, alla fine in qualche modo ci sono arrivato e mi son corretto da me l’immagine x usi futuri, quello dell’AREF invece non la capisco..non ci arrivo proprio..
    ho provato persino a spulciare nel “wiring.c” e negli altri file che richiama, ma non ho “esperienza” per beccare un eventuale errore.
    ho comunque provato a commentare nel file core_adc.h la riga qui sotto,
    ADMUX = (ADMUX & ~MASK2(REFS1,REFS0)) | (((vr & B11) >> 0) << REFS0);
    e sostituirla ignorantemente con
    ADMUX = (ADMUX & 0x7F) | 0×40; (dal datasheet se ho capito qualcosa dobrebbe dire, usa riferimento Esterno)
    risultato.. 0 non cambia nulla
    nel codice ho provato a dichiarare usando vari "metodi" dall' "analogReference(EXTERNAL)" al dichiarare proprio ignorantemente "ADMUX = (ADMUX & 0x7F) | 0×40;" ma anche qui… nulla, il fatto è che qualsiasi cosa dichiaro… non cambia il risultato.
    provo magari a descriverti meglio "il problema" e dove devo arrivare, magari sbaglio io qualcosa…ma premetto che il "giochino" ha funzionato perfettamente con Arduino Nano.. presumo che con i dovuti "aggiustamenti" debba funzionare anche qui.

    in pratica.. ho un Attiny84A (SMD), che mi gestisce (correttamente) un modulino WTV20SD16, quindi in soldoni l'attini mi serve per dire al modulo quale degli MP3 eseguire, e uso L'analogico per la gestione di 3 pulsanti, la lettura dell'analogico la richiamo tramite "timer interrupt".
    alla prova ho notato che.. nella gestione dei pulsanti non funzionava un tubo… quindi ho provato a farmi un "software" ignorantissimo per testare l'analogica.. con un set di 4 " if " ho provato a "vedere" come si comportava l'analogica, sfruttando 3 led x identificare un range di letture.. in pratica … 0-300 accendo il led 1, 300-600 il 2, 600-900 il 3, 900-1023 tutti e 3 i led…
    applicando un potenziometro al pin in questione (il 9)…in pratica … ho tutta la gamma di valori in 1V circa… da 5 a 4 piu o meno… da qui il fatto che credo non venga attivato il Ref esterno..
    che ne pensi? sbaglio qualcosa io ?

  4. marcoveronelli

    Salve. ieri sera…per me, si è un po evoluta la cosa….e diciamo che è +/- risolta (almeno a livello funzionale)…ma è una cosa un pò strana..(almeno per me).
    se uso nell’istruzione di lettura porta analogica (come ho sempre fatto, analogRead(pin) ) mi fa quello scherzo sulla lettura di assegnare la totalità dei valori in circa 1V.. se uso invece analogRead(A1) o analogRead(PA1) funziona normalmente su tutto il range dei 5V di REF.
    Any Idea?
    ciao.

  5. Leonardo Miliani

    Ieri non ho fatto in tempo a fare dei test, troppo incasinato. Oggi controllo. Quindi secondo quanto mi dici, se fai analogRead(1) o analorRead(A1) ottieni nel primo caso il problema mentre nel secondo no.

  6. marcoveronelli

    ciao leonardo
    mmm io richiamo la lettura non con analogRead(1) ma con analogRead(9)… vuoi dire che il mio errore sta tutto li?
    quello che mi fa strano è che comunque legge, ma sbagliato..
    ora come ora mi viene il dubbio (ho fatto 1000 prove quando cercavo di trovare i pin)….ma mi pare che con 1 non leggesse.
    io la richiamo con analorRead(9) se al posto di 9 metto A1 o PA1 allora va..
    stasera per curiosità appena torno a casa provo… nel caso.. mi son rincitrullito completamente…

  7. marcoveronelli

    ok, grazie dell’aiuto leonardo.
    son io che sono andato in confusione coi pin. con 1 funziona…
    consideo tutto risolto :)

  8. Leonardo Miliani

    Perfetto. Il problema penso sia nato proprio dalla scheda di Pighi perché le numerazioni dei pin analogici seguono un ordine inverso, cioè PA0 è A0 ma D10, PA1 è A1 ma D9 ecc..

  9. marcoveronelli

    ciao leonardo, si ma anche un po mio :) normalmente finora sull’arduino, difficilmente ho usato le analogiche come digitali dove comunque proseguono in senso logico rispetto alle digitali, cioè a0 è 14, a1 15 e via discorrendo.. qui me le son trovate “ribaltate” e sono andato anche un po’ in pappa io..visto che lo richiamavo con il pin digitale e non analogico. ora non so quanto sia errato, nel senso che onestamente ora come ora, non so se richiamando analogRead(14) sull’arduino crei problemi o meno..
    quello che mi fa comunque “specie” è che dandogli il pin Digitale (per quanto sbagliato)…. leggesse comunque dalla porta chiamata ma con valori… alquanto strani.
    vabbe comuqnue diciamo che “va bene cosi” :D
    mi piacerebbe solo capire se e come si puo “ribaltare” la numerazione….che avrebbe un pochino di senso logico in +

  10. Leonardo Miliani

    Alla numerazione per semplicità tendono a farle rispettare quella dei pin sulle porte.
    Siccome la priorità la danno ai pin digitali, si parte sempre con D0 sul 1° pin usabile dopo il piedino n° 1 del chip. Nel caso dell’Attiny84 è PB0. E via a salire. Nel caso dei pin analogici sull’Arduino hanno usato la numerazione per gli analogici a seguire di quella per i pin digitali. Qui non potevano farlo perché la porta, come vedi dallo schema che ti ho riportato qui sopra, va al contrario, ossia invece di mettere PA0 sul 6° pin ce l’abbiamo sul penultimo piedino. Quindi a livello di codice hanno seguito questo schema, che è più facile da gestire nel core ma che può creare qualche incomprensione. E’ così anche sui Mega644/1284, anche lì i pin analogici vanno a ritroso. Non so perché, andrebbe chiesto a “mamma Atmel” :-)

Lascia un Commento