LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: almamater em 24 de Outubro de 2014, 16:00

Título: Attiny85 e Attiny84
Enviado por: almamater 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:

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.
Título: Re: Attiny85 e Attiny84
Enviado por: Electropepper 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.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater em 26 de Outubro de 2014, 10:17
Raios,  o Blink test no Attiny85 funciona bem, no Attiny84 não estou a conseguir.


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 (http://duino4projects.com/wp-content/uploads/2013/06/Using-the-Arduino-Uno-to-program-ATTINY84-20PU-circuit.jpg).
Título: Re: Attiny85 e Attiny84
Enviado por: fergas 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.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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).
Título: Re: Attiny85 e Attiny84
Enviado por: almamater em 26 de Outubro de 2014, 16:30
Se calhar já sei.. é preciso meter algum Crystal?
Título: Re: Attiny85 e Attiny84
Enviado por: senso 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..
Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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?
Título: Re: Attiny85 e Attiny84
Enviado por: senso em 20 de Novembro de 2014, 13:22
Sim, tudo correcto, depois só via HVPP ou HVSP.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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).
Título: Re: Attiny85 e Attiny84
Enviado por: jm_araujo 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.



Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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.

Título: Re: Attiny85 e Attiny84
Enviado por: senso 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.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater 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
Título: Re: Attiny85 e Attiny84
Enviado por: Njay em 28 de Novembro de 2014, 02:05
Troca a de 10k por 1K ou 560 e experimenta tocar outra vez com a chave.
Título: Re: Attiny85 e Attiny84
Enviado por: almamater em 29 de Novembro de 2014, 00:36
560R resolveu :)