Свежие обсуждения
Микроконтроллеры

Сил уже больше нет - ПРЕРЫВАНИЯ и АТМЕГА8

1 2 4

Дык это не моя химия это так CodeVision сгенерил я этот кусочек не портил, только пытался в нем разобраться .... но мало что понял

а как правильно он должен выглядеть этот кусочек?

 

Почитал про noise reduction. Написано что он сам запускает преобразование. Попробуй убрать


ADCSRA|=0x40;

 

chav1961: Если в нем установлен ADC Noice Reduction, никаких sleep делать не надо - при установке флага начала преобразования процессор сам переходит в спячку.

Наоборот

When the SM2..0 bits are written to 001, the SLEEP instruction makes the MCU enter ADC Noise Reduction mode...

If the ADC is enabled, a conversion starts automatically when this mode is entered.

 

То АНТОХА, сначала ADCSRA|=0x40; не было, я и думал что будет само запускаться.... преобразование вообще не запускалось, пришлось вставить, начало запускаться.

 

AHTOXA: Такое может быть, если АЦП настроен на непрерывное преобразование. В этом случае при смене канала он сначала завершает текущее преобразование.
Нет АЦП настроен на одиночное преобразование.

 

Lerik: То АНТОХА, сначала ADCSRA|=0x40; не было, я и думал что будет само запускаться.... преобразование вообще не запускалось, пришлось вставить, начало запускаться.

Может протеус дурит? Я привык верить даташитам... Попробую в железе.

 

может быть попробую

 

Блин блин блин, вы не поверите, в железе все работает , не надо ни задержек, на запуска вручную преобразования.

попутно вопрос, как округлить?

float F_data;
char S_data[4];

F_data = 2,5987;

Как округлить чтобы в F_data было 2,59 ?
И аналогично чтобы в S_Data было 2,5 ?

 

Вот потому я и не пользуюсь протеусом


unsigned int i = F_data * 100; // в i 259
float f = i; // в f - 259.0
f /= 100; // в f - 2.59

Ну или всё это в одну строчку:

float f = (float)((unsigned int)(F_data * 100))/100; Вроде так

Второе проще:


#include <stdio.h>
sprintf(S_data, "%7.1f", F_data); // в S_data - 2.5

 

Мда... да я тоже раньше не пользовался, а тут вдруг понравилось, что можно отладить программу без железа и начал ....
Но с другой стороны если знать его глюки, то может и ничего?

Да, точно про первый пример я не додумался, что после умножения надо в int записывать

А второй делал, только блин видимо в Протеусе это тоже не работает, а в железе не пробовал, точнее пробовал но только целые числа и в другом проекте.
АНТОХА, а почему пиктура 7.1 ? Если число будет не больше 9,9 можно ведь 3.1 ?