Решил сделать тахометр для своего манзапа на Atmega 8, написал программку а она не пашет должным образом. Принцип работы заключается в том что нулевая ножка порта C с каждым оборотом двигателя замыкается на массу. Задача программы посчитать количество этих замыканий в минуту и вывести это шкалой светодиодов подключенных к порту B и D.
Программа:
#include <avr/io.h>
#include <avr/delay.h>
int main(void)
{
DDRD = 0b11111111;
DDRB = 0b11111111;
DDRC = 0b00000010;
PINC = 0b00000001;
while(1)
{
int x = 0;
int itog;
for (int i;i<=1000;i++)
{
if (PINC == 0b00000000)
{
x++;
}
_delay_ms(1);
}
itog = (x * 60) / 100;
//______________________________
switch(itog)
{
case 1 ... 500:
PIND = 0b00000001;
break;
case 501 ... 1000:
PIND = 0b00000011;
break;
case 1001 ... 1500:
PIND = 0b00000111;
break;
case 1501 ... 2000:
PIND = 0b00001111;
break;
case 2001 ... 2500:
PIND = 0b00011111;
break;
case 2501 ... 3000:
PIND = 0b00111111;
break;
case 3001 ... 3500:
PIND = 0b01111111;
break;
case 3501 ... 4000:
PIND = 0b11111111;
break;
default:if (itog >= 4000) PIND = 0b11111111;
}
switch(itog)
{
case 4001 ... 4500:
PINB = 0b00000001;
break;
case 4501 ... 5000:
PINB = 0b00000011;
break;
case 5001 ... 5500:
PINB = 0b00000111;
break;
case 5501 ... 6000:
PINB = 0b00001111;
break;
case 6001 ... 6500:
PINB = 0b00011111;
break;
case 6501 ... 7000:
PINB = 0b00111111;
break;
case 7001 ... 7500:
PINB = 0b01111111;
break;
case 7501 ... 8000:
PINB = 0b11111111;
break;
default:if (itog >= 8001) PINC = 0b00000010;
}
PIND = 0b00000000;
PINB = 0b00000000;
}
}
Раздел: Песочница или Вопрос-Ответ
Программа:
#include <avr/io.h>
#include <avr/delay.h>
int main(void)
{
DDRD = 0b11111111;
DDRB = 0b11111111;
DDRC = 0b00000010;
PINC = 0b00000001;
while(1)
{
int x = 0;
int itog;
for (int i;i<=1000;i++)
{
if (PINC == 0b00000000)
{
x++;
}
_delay_ms(1);
}
itog = (x * 60) / 100;
//______________________________
switch(itog)
{
case 1 ... 500:
PIND = 0b00000001;
break;
case 501 ... 1000:
PIND = 0b00000011;
break;
case 1001 ... 1500:
PIND = 0b00000111;
break;
case 1501 ... 2000:
PIND = 0b00001111;
break;
case 2001 ... 2500:
PIND = 0b00011111;
break;
case 2501 ... 3000:
PIND = 0b00111111;
break;
case 3001 ... 3500:
PIND = 0b01111111;
break;
case 3501 ... 4000:
PIND = 0b11111111;
break;
default:if (itog >= 4000) PIND = 0b11111111;
}
switch(itog)
{
case 4001 ... 4500:
PINB = 0b00000001;
break;
case 4501 ... 5000:
PINB = 0b00000011;
break;
case 5001 ... 5500:
PINB = 0b00000111;
break;
case 5501 ... 6000:
PINB = 0b00001111;
break;
case 6001 ... 6500:
PINB = 0b00011111;
break;
case 6501 ... 7000:
PINB = 0b00111111;
break;
case 7001 ... 7500:
PINB = 0b01111111;
break;
case 7501 ... 8000:
PINB = 0b11111111;
break;
default:if (itog >= 8001) PINC = 0b00000010;
}
PIND = 0b00000000;
PINB = 0b00000000;
}
}
Раздел: Песочница или Вопрос-Ответ