collapse

* Posts Recentes

Misumi por ralex
[Hoje às 02:33]


cabo utp cravar por Alfredo Garcia
[Ontem às 22:24]


Alimentar Fita Leds por almamater
[22 de Setembro de 2018, 16:50]


Como transformar um mosquito killer de tomada em um portátil? por jm_araujo
[20 de Setembro de 2018, 13:35]


Carregador para 18650 por brunus
[19 de Setembro de 2018, 23:16]


Keysight UXR 110GHz BW, 256GS/s, 10-bit Real-Time Oscilloscope por SerraCabo
[19 de Setembro de 2018, 20:26]


leitura de voltagens com o analogRead(A0) por jm_araujo
[16 de Setembro de 2018, 18:36]


BostonDynamics - Vai uma mãozinha? por josecarlos
[16 de Setembro de 2018, 11:26]


Comunidades Online de Drones por MAntunes
[09 de Setembro de 2018, 18:00]


Sorte do catano por Njay
[09 de Setembro de 2018, 16:51]

Autor Tópico: AVR - GPIO limites High e Low  (Lida 1580 vezes)

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

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.746
AVR - GPIO limites High e Low
« em: 24 de Setembro de 2012, 16:01 »
Olá,
Precisava de medir a constante de tempo de um circuito RC mas ia utilizar apenas pinos digitais de um atmega328p.
Eu precisava de saber ao certo quando é que o atmega define um pino como 1 ou 0. Segundo a datasheet ele necessita no mínimo de 0.6*Vcc para ser considerar high e no máximo 0.3Vcc para ser low.

No entanto estou a medir 2.24V como a tensão a que ele muda de estado... A minha questão é se alguém com mais experiência acha que posso considerar que vai ser sempre este valor para esta alimentação, se isto vai mudar quando desligar e volta a ligar, ou outra coisa qualquer... Acham que posso considerar esta tensão para os cálculos da constante de tempo?

Defini uma interrupção de Falling Edge no int0 e lá mudo o valor de um bit que depois analiso no osciloscópio juntamente com o sinal que é utilizado para gerar a interrupção.



laranja - pino pb2 que vai carregar o condensador.
azul - tensão no condensador
lilás - pb1 só como debug

O sinal azul é o que é usado no INT0.

Código: [Seleccione]
#define F_CPU 16000000    // AVR clock frequency in Hz, used by util/delay.h
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

ISR(INT0_vect){
PORTB |= (1<<PB1);
}

int main() {
DDRD |= (1<<DDD1);          // set LED pin PD1 to output

DDRB |= (1<<PB2);//sinal
DDRB |= (1<<PB1);//debug
DDRB &= ~(1<<PB0);//ler entrada

PORTB |= (1<<PB2);
PORTB &= ~(1<<PB1);

uint16_t i=0;

EICRA = 0b00000010;
EIMSK = 0b00000001;
sei();

while (1) {
PORTB |= (1<<PORTB2);   // drive PB2 high
PORTB &= ~(1<<PB1);
_delay_ms(3000);         // delay 3000 ms

PORTB &= ~(1<<PORTB2);  // drive PB2 low
_delay_ms(1);   

}
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.550
  • Helpdesk do sitio
Re: AVR - GPIO limites High e Low
« Responder #1 em: 24 de Setembro de 2012, 16:06 »
Ele compila sem se queixar nesta linha:
DDRD |= (1<<DDD1);          // set LED pin PD1 to output

Isso é provavel que seja a histerese dos pinos, mas mesmo assim, fica um bocado ao lado do que diz na datasheet.
Avr fanboy

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.746
Re: AVR - GPIO limites High e Low
« Responder #2 em: 24 de Setembro de 2012, 16:58 »
Ele compila sem se queixar nesta linha:
DDRD |= (1<<DDD1);          // set LED pin PD1 to output

Isso é provavel que seja a histerese dos pinos, mas mesmo assim, fica um bocado ao lado do que diz na datasheet.

Essa linha é lixo e mesmo assim não estou a usar esse pino...

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.343
    • Tróniquices
Re: AVR - GPIO limites High e Low
« Responder #3 em: 26 de Setembro de 2012, 23:51 »
Não te podes fiar no valor exacto, isso muda de chip para chip e provavelmente muda com a temperatura e tensão de alimentação.

No entanto... tens o comparador de tensão, e podes usar uma tensão externa de comparação ou a tensão interna de referência (que terás de calibrar). O comparador faz exactamente o que precisas. Dá uma olhadela na datasheet que explica tudo, tem uma secção só para o comparador de tensão.