vou demonstrar aqui como fazer uma simples discadora de pulsos,para isso você terá que montar o seguinte circuito :
veja o código fonte:
/* * Discagem por pulsos * Version : 1.0 * microcontrolador : AVR ATMega328 * descrição : como montar uma discadora por pulso * criado: 11/07/2012 * autor: aguivone moretti fogia */ #define F_CPU 16000000 // 16 MHz #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include <util/delay.h> #include <string.h> //#include <avr/eeprom.h>//usado para acessar memoria //funçoes basicas dos pinos #define alterna_pino(x,y) x ^= _BV(y) #define liga_pino(x,y) x |= _BV(y) #define desliga_pino(x,y) x &= ~(_BV(y)) #define estado_pino(x,y) ((x & _BV(y)) == _BV(y)) //o pino deve estar como entrada ,testa se está em nivel logico 1 #define PULSO PC1 //no rele de discagem deve ser colocado um resistor de 470R para não curto circuitar a linha telefonica void numero(int valor) { int xis=0; while(xis < valor) { desliga_pino(PORTC,PULSO); _delay_ms(35); liga_pino(PORTC,PULSO); _delay_ms(65); xis++; } _delay_ms(400);//espaço necessario entre cada digito } //////////////////////////////////////////////função principal/////////////////////////////////////////// int main(void) { DDRC = 0XFF; //inicializa portC como saida; for(;;) { // os numeros deve ser de 1 a 9, para o zero use o numero "10" //vamos supor que vai ligar para o numero 1234 5670 liga_pino(PORTC,PULSO); _delay_ms(200); //espera para dar linha para discar numero(1); numero(2); numero(3); numero(4); numero(5); numero(6); numero(7); numero(10);//zero _delay_ms(10000); //espera para chamar por 10s desliga_pino(PORTC,PULSO); _delay_ms(10000);//espera 10s e liga denovo } }
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!