Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06 Авторитет: 13
Вне форума
Предупреждения: (0%)
НЕ прокатил этот вариант. часа два проработал и сдох один из предохранителей. (пробовал разные варинаты задержки) - все равно сдыхает. Нужно будет нарисовать всю схему и прошивку, может где напортачил.
____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06 Авторитет: 3
Вне форума
Предупреждения: (0%)
О... ну так с этого и надо было начинать.
Частоту тактирования надо устанавливать однозначно, это ведь не операционка.
Библиотечные delay_ms() просто выполняют некоторое кол-во NOPов, при этом полагаясь на "какую-то" константу которая должна соответствовать тактовой частоте. Что то вроде: #define Fclk 1200000 в Libr_Name.h файле.
По опыту знаю, лучше писать процедуру задержки самому используя какой либо таймер.
Что касается фьюс битов, то хоть они и называются битами, физически записываются в контроллер побайтово. И если их писать, то устанавливать надо все. Иначе ХЗ что запишится на место неустановленных. Тем более что фьюсы определяют кучу основных параметров, в том числе и источник тактирования, коэффициент деления тактовой, вотчдог и пр.
Вообщем, нет никакой гарантии, что 20mS пауза действительно длится именно это время.
unsigned int i; unsigned int f1=0; unsigned int f2=0; unsigned int v_in; unsigned int v_out; unsigned int volt; unsigned char fout; unsigned char er=0; unsigned int Vpr=0;
void in(unsigned int v_in) { int temp[4]; if (f2>=10){lcd_clear_my();f2=0;} else f2++; //lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("INPUT "); itoa(v_in,temp); lcd_puts(temp); lcd_putsf(" VOLT"); }
void out(unsigned int v_out) { int temp[4]; if (f1>=10){lcd_clear_my();f1=0;} else f1++; lcd_gotoxy(0,1); if (er==1) lcd_putsf("OUT OF 140-260"); else { itoa(v_out,temp); lcd_putsf("OUTPUT "); lcd_puts(temp); lcd_putsf(" VOLT"); } }
void FU(unsigned int v_in) { if (v_in<100) {fout=0b00000000; er=1;} else if (v_in<160) {fout=0b00000001; er=0;} else if (v_in<180) {fout=0b00000010; er=0;} else if (v_in<200) {fout=0b00000100; er=0;} else if (v_in<220) {fout=0b00001000; er=0;} else if (v_in<240) {fout=0b00010000; er=0;} else if (v_in<260) {fout=0b00100000; er=0;} else {fout=0b00000000; er=1;} PORTC=fout; }
unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; }
Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06 Авторитет: 13
Вне форума
Предупреждения: (0%)
Вот схема прибора:
Показаны только 1 и 6 каналы. Трансформатор - автотрансформатор. шаг 20В от 160В до 260В выходы. Переключение по входу. от 220В (4 вывод) отходит выход. Вход идет через симисторы на одну из обмоток.
____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06 Авторитет: 3
Вне форума
Предупреждения: (0%)
Цитата
так установлена 1 мгц. пробовал и 4 мгц тоже. прошивал avr studio. И фьюзы зашиты те которые были зашиты при производстве, менял только JTAG(Отключил), и поставил тактовую частоту (1 мгц + 64ms).
Не имеет значение, чем прошивать. Сам интерфейс записи фьюсов организован так, что они не могут шится каждый отдельно. И если каждый из них не указать явно, то прошьется то значение которое программатор(AVR студия) считает "по умолчанию". А что она считает таким - ХЗ.
По поводу проги, пробежался вскользь, сразу не понравилась запись DDRC = 0х00. Это означает, что PORTC все время будет настроен как входной и работать на выход нормально не сможет. Сейчас, если и работает, то только с помощью встроенных PullUp резисторов. Короче, надо записать DDRC = 0xFF.
На схеме, выходы порта подключать не напрямую к оптопаре и светодиоду, а через ограничивающие резисторы 100 Ом примерно, иначе можно спалить выходную логику порта(внутреннего ограничителя тока там нет).
Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06 Авторитет: 13
Вне форума
Предупреждения: (0%)
Цитата
На схеме, выходы порта подключать не напрямую к оптопаре и светодиоду, а через ограничивающие резисторы 100 Ом примерно, иначе можно спалить выходную логику порта(внутреннего ограничителя тока там нет).
на самом деле стоит резистор 200 ом - один общий на все оптопары.
Цитата
И если каждый из них не указать явно, то прошьется то значение которое программатор(AVR студия) считает "по умолчанию".
что значит не указан явно? там только два варианта: стоит "птичка" или нет
____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06 Авторитет: 13
Вне форума
Предупреждения: (0%)
А может не в прошивке проблема??? а в самой схеме? по сути симисторы сами по себе не зыкрываются, их при отсутствии управляющего напряжения закрывает ток обратного полупериода. Возможно тут где то я не прав?
____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
Сообщение отправляется. Пожалуйста, подождите...
После проверки сообщения модератором, оно будет добавлено в эту тему