Перейти к содержанию
    

Jagupop

Участник
  • Постов

    28
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Jagupop

  • Звание
    Участник
    Участник
  • День рождения 17.12.1968

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Тема куда-то не в то русло уж зашла. Что такое АЦП с внутренним PGA? Это сразу с усилителем в корпусе? Сильно не пинайте, с АЦП пока мало сталкивался.
  2. Разе что, поставить операционник с двухполярным питанием? Не хотелось заморачиваться с доработкой блока питания...
  3. Стоит задача оцифровать "вялотекущий процесс" (то есть, быстродействие не критично), изменяющийся в пределах от 0 до 50 милливольт 12-разрядным АЦП. Я вот, думаю, эти 50 милливольт надо как-то "растянуть" на диапазон хотя-бы 5 Вольт. Но как, не нарушая линейности? Усилитель напряжения нарушит линейность, особенно при значениях близких к 0 Вольт. Может какая-то готовая микросхема уже существует? Направьте "на путь истинный". Спасибо.
  4. Собственно, задача такая - со вторичной обмотки сетевого трансформатора идет два диода, соединенные катодами, делитель на резисторах, разумеется, ограничительный стабилитрон, далее - пару инверторов на 561ЛН2 и сформированные импульсы частотой 100 Гц идут затем на различную цифровую логику. Так вот заметил, что счетчик, стоящий далее по схеме, "криво" считает. Обратил внимание, что переходы из "0" в "1" и обратно после формирования импульсов при помощи 561ЛН2 не "чистые". "Шум", понянтое дело, еще из сети валит. Вопрос как этот шум не сложно убрать. Спасибо!
  5. А разве можно в прерывании процессор снова заставить "уснуть"? А куда процессор уйдет после просыпания в этом случае? Разве не на эту же самую подпрограмму обработки прерывания, в которой он и так уже находится?
  6. Чуток не так... По falling edge проц выходит из спящего режима уходит на подпрограмму обработки прерывания. На INT0 все это время "сидит" лог. 0. Тут все хорошо. Но "заснуть"снова он должен после прихода на INT0 логической единицы! А не перед этим. Как это осуществить? Спасибо.
  7. С прерываниями разобрался - проц. по приходу сигнала на INT0 "просыпается", выполняет поставленную задачу и снова "засыпает". Все красиво. Спасибо конференции. НО (!). Есть несколько другая задача, которую я не знаю как решить из-за небольшого опыта. В общем, проц. "спит". На INT0 постоянно сидит лог. 1. При появлении лог. 0 проц должен проснуться и выполнять, что ему указано. При этом на INT0 - лог. 0 держится постоянно. Лишь с появлением на INT0 лог.1 проц. должен выполнить определенные предпмсания и "заснуть" в ожидании очередного лог. 0 на INT0. Вот как это реализовать? Я так понимаю, в процессе работы INT0 должен "превращаться" в PD2? Спасибо.
  8. defunct, я Вас пыталсявыловить в ICQ - все безрезультатно. В общем, когда вставляю в программу: SIGNAL (INT0_vect) { } при трансляции появляются такие warning'и: main.c: In function `main': main.c:43: warning: static declaration of '__vector_1' follows non-static declaration main.c:42: warning: previous declaration of '__vector_1' was here А результат - тот же.
  9. ЛЮДИ!!! ЧЕЛОВЕКИ!!! Помогите!!! Задолбался совсем. Ну нихрена не пойму - что не так? GIMSK = 0b01000000; //разрешение прерываний по входу INT0 for (a=0; a<100; a+=1) { _delay_loop_2 (30000); //задержка } set_sleep_mode (SLEEP_MODE_IDLE); //выбор типа SLEEP MODE sleep_mode (); // спи, гад! sei (); //глобальное разрешение прерываний ISR (INT0_vect); PORTB = (PINB^0x08); //включить светодиод 1 cli (); label1: goto label1; С появлением лог. "0" на INT0 должен загореться светодиод. Пробую по-разному. Или не загорается вовсе или загорается сам по себе. Уже махаюсь немеряно времени. Что не так? Не пинайте сильно - учусь, учусь... Спасибо.
  10. Ну вот полный... #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <util/delay.h> #define Freq 4000000 unsigned char z; int zaziganie (z) { char i; z = 0; for (i=0; i<60; i+=1) { if ((PIND & 0x04) == 0); else z += 1; _delay_loop_2 (100); } return z; } //void presskey (void) int main (void) { DDRD = 0x00; PORTD = 0xFF; DDRB = 0b11111100; PORTB = 0b00000000; ACSR = 0b00000000; GIMSK = 0b01000000; label1: set_sleep_mode (SLEEP_MODE_IDLE); sleep_enable (); sei(); sleep_cpu (); sleep_disable (); PORTB = 0xFF; zaziganie (z); if (z < 30) goto label1; _delay_loop_2 (1000); PORTB = (PINB^0b10010000); //presskey (); label2: zaziganie (z); if (z > 30) goto label2; else goto label1; }
×
×
  • Создать...