collapse

* Links de Robótica

* Posts Recentes

Feira de electricidade e eletrónica por artur36
[Ontem às 23:07]


Power_OK Enermax por almamater
[Ontem às 12:10]


Recomendação de um opamp para um DAC r2r por jm_araujo
[23 de Novembro de 2017, 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]

Autor Tópico: Attiny85 e Attiny84  (Lida 3607 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Attiny85 e Attiny84
« em: 24 de Outubro de 2014, 16:00 »
Estou a fazer umas coisas e queria usar um destes Attiny´s, o Attiny85 estive a testar ontem e metê-lo a dormir, usando este código:

Código: [Seleccione]
#include <avr/sleep.h>
#include <avr/interrupt.h>

const int switchPin                     = 3;
const int statusLED                     = 2;

void setup() {

    pinMode(switchPin, INPUT);
    digitalWrite(switchPin, HIGH);
    pinMode(statusLED, OUTPUT);

    // Flash quick sequence so we know setup has started
    for (int k = 0; k < 10; k = k + 1) {
        if (k % 2 == 0) {
            digitalWrite(statusLED, HIGH);
            }
        else {
            digitalWrite(statusLED, LOW);
            }
        delay(250);
        } // for
    } // setup

void sleep() {

    GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
    PCMSK |= _BV(PCINT3);                   // Use PB3 as interrupt pin
    ADCSRA &= ~_BV(ADEN);                   // ADC off
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // replaces above statement

    sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
    sei();                                  // Enable interrupts
    sleep_cpu();                            // sleep

    cli();                                  // Disable interrupts
    PCMSK &= ~_BV(PCINT3);                  // Turn off PB3 as interrupt pin
    sleep_disable();                        // Clear SE bit
    ADCSRA |= _BV(ADEN);                    // ADC on

    sei();                                  // Enable interrupts
    } // sleep

ISR(PCINT0_vect) {
    // This is called when the interrupt occurs, but I don't need to do anything in it
    }

void loop() {
    sleep();
    digitalWrite(statusLED, HIGH);
    delay(1000);
    digitalWrite(statusLED, LOW);
    }

Está tudo Ok, e estive a ver como funciona o código e quanto a este Attiny85 esta questão:
  • é possível usar o pino 1 (RESET) como IO sem problemas? Ao fazer isso o que acontece é que deixo de conseguri programá-lo com o Arduino?

No entanto, para o projecto que queria fazer preciso de mais uns 2 pinos, e se calhar estou a pensar num Attiny84 que tenho tb aqui.
  • Posso usar o mesmo código no Attiny84, do modo sleep que usei acima?

Offline Electropepper

  • Mini Robot
  • *
  • Mensagens: 116
    • Electropepper
Re: Attiny85 e Attiny84
« Responder #1 em: 24 de Outubro de 2014, 19:37 »
Sim se desabilitares o pino de RESET, só podes depois disso usar um HVPP(High Voltage Parallel Programmer), como o stk500, quanto a usar código de arduino não sei, só tenho usado GCC-AVR.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #2 em: 26 de Outubro de 2014, 10:17 »
Raios,  o Blink test no Attiny85 funciona bem, no Attiny84 não estou a conseguir.

  • Fiz Upload do sketch "ArduinoISP" para o Arduino Uno
  • No menu 'Board' defini "Attiny84 @ 20MHz"
  • No menu 'Programmer' defini 'Arduino as ISP'

No código do BlinkTest meti o LED no pino "2", e liguei o LED ao 5º do chip Attiny84 (D2) mas não funciona.. alguma ideia?

Ligações iguais a estas.
« Última modificação: 26 de Outubro de 2014, 10:20 por almamater »

Offline fergas

  • Mini Robot
  • *
  • Mensagens: 111
Re: Attiny85 e Attiny84
« Responder #3 em: 26 de Outubro de 2014, 11:21 »

No código do BlinkTest meti o LED no pino "2", e liguei o LED ao 5º do chip Attiny84 (D2) mas não funciona.. alguma ideia?


Não apanhei esta.
O código não foi inicialmente feito para o arduino? É que as portas nos pinos 2 dos 3 chips não têm o mesmo valor nos 3 chips. No arduino o 2 é referente ao pino 4 -PD2. No attiny 85 o pino 2 é o PB3. No attiny 84 o pino PB3 é o 4.
Se portaste o código do arduino para o attiny tens de também confirmar que os registos têm o mesmo nome.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #4 em: 26 de Outubro de 2014, 11:26 »
Sim desculpa não me expliquei bem.

Código:
Código: [Seleccione]
int led = 2;

void setup() {               
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

O LED liguei-o no PB2 (pino 5) do Attiny84 (com uma resistência de 1k no GND).

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #5 em: 26 de Outubro de 2014, 16:30 »
Se calhar já sei.. é preciso meter algum Crystal?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: Attiny85 e Attiny84
« Responder #6 em: 26 de Outubro de 2014, 16:38 »
Pois, a 20Mhz com o oscilador interno é que não é.
Isso de usar Arduino, atirar chips para a breadboard e nem abrir datasheets é receita garantida para nunca dar nada certo..
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #7 em: 26 de Outubro de 2014, 17:23 »
Sim tens razão, não li muito bem, tentei perceber mas não estava conseguir. De qualquer forma voltei a olhar e mesmo sem crystal, testei a 1MHz. Enviei o bootloader de 1MHz, enviei novo sketch e está a funcionar. Mesmo em SleepMode tb está a funcionar, alterei o PCMSK e GIMSK de acordo com a datasheet e parece OK.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #8 em: 20 de Novembro de 2014, 12:27 »
Olá.

Uma dúvida, o pino de RESET no Attiny tem de ser ligado ao VCC com uma resistência de 10K correcto?

No caso de querer utilizar este pino como interrupt ou Output tinha de alterar os Fuses e deixava de o conseguir programar através do Arduino (ISP) certo?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: Attiny85 e Attiny84
« Responder #9 em: 20 de Novembro de 2014, 13:22 »
Sim, tudo correcto, depois só via HVPP ou HVSP.
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #10 em: 27 de Novembro de 2014, 10:25 »
Mais uma coisita, reparei ontem que, tendo o Attiny em modo Sleep com 1 interrupt num pino (neste caso o D2), se existir uma oscilação no pino, como por exemplo tocar com o dedo ou encostar a um metal qualquer, ele 'acorda'.

A ideia é ele sair do modo sleep apenas quando o pino D2 é ligado ao GND, há algo que possa adicionar para garantir mais 'estabilidade' no pino interrupt? (não o tenho ligado a nada, apenas o ligo ao GND para acordar o Attiny).

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.167
  • NERD!
Re: Attiny85 e Attiny84
« Responder #11 em: 27 de Novembro de 2014, 10:54 »
Nunca se devem deixar entradas ao ar. Ou se ligam/colocam pull-ups/pull-downs, ou se configuram como saídas.

Mas mesmo assim pode não resistir a tocar de metal/dedo. Somos umas excelentes antenas para o campo de 50Hz causado pela rede elétrica.




Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #12 em: 28 de Novembro de 2014, 01:34 »
Pois.. eu já meti uma resistência de 10K do pino (interrupt) ao VCC, mas basta tocar com um metal qualquer, por exemplo uma chave, no pino que ele acorda e sai do sleep mode, o interesse era mesmo só qdo fosse ao Gnd.


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: Attiny85 e Attiny84
« Responder #13 em: 28 de Novembro de 2014, 01:47 »
Dói quando faço isto.
Então pára de fazer isso.

Presumo que não seja para andar a enfiar os dedos no circuito.
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.519
    • GrcByte - Projectos
Re: Attiny85 e Attiny84
« Responder #14 em: 28 de Novembro de 2014, 01:54 »
Lol  :P sim tenho de deixar de tocar no circuito..

Mas só detectei isto nem foi com os dedos.. foi ao desligar o circuito da fonte e ao tirar a ficha da tomada reparei que ele ligou, deve ter notado alguma alteracao e pimbas... mas pronto, nao me vou preocupar mais com isto