collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.918
    • 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.918
    • 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: 159
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.918
    • 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.918
    • 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.733
  • 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.918
    • 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.918
    • 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.733
  • 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.918
    • 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.947
  • 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.918
    • 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.733
  • 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.918
    • 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