Jump to content

Discovery 66

Members
  • Content Count

    131
  • Joined

  • Last visited

Community Reputation

1 Обычный

About Discovery 66

  • Rank
    Осваивающийся
  • Birthday 12/26/1985

Информация

  • Пол
    Мужчина
  • Город
    г.Рудный Казахстан
  1. что то я не очень понял про двоично десятичные переключатели.... как с их помошью можно менять сопротивления???? поясните пожалуйста
  2. Схема нужна, то что есть спец микросхемы я в курсе... я приобрести не могу их быстро, посылки по 1 - 2 месяца идут.
  3. а без реле можно как нибудь и желательно без полевиков на биполярах и т.п., может на логике как нибудь? у меня есть схемы ЦАПа на резисторах R - 2R, но это немного не то....
  4. Поскажите, или ткните носом в гугле, кароче мне нужна схема цифрового потенциометра на 256 шагов, если можно так выразиться... для чего мне это... планирую сделать блок питания с дискретной регулировкой напряжения... только не говорите что есть ШИМ, про него я наслышан... и еще, может у кого то есть схема, вроде из журнала радио была, там блок питания с дискретной регулировкой до 25,5 вольт с шагом 0,1 вольт дайте ссылку, ищу уже два дня - не могу найти... Спасибо всем!
  5. hd44780 Спасибо, все заработало!!!! вот полный исправленный код, может таким как я пригодится это для меги 8 // Использование АЦП. Цифровой вольтамперметр #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //------------------0-----1-----2-----3-----4-----5-----6-----7-----8------9----dp char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80}; volatile unsigned char segcounter = 0; volatile int display_1; volatile unsigned long value_1; unsigned int u, g, t = 0, k = 15, z = 4; volatile unsigned int adc_counter; // Прерывание по переполнению T2, динамическая индикация ISR (TIMER2_OVF_vect) { PORTD = 0xFF; PORTB = (1 << segcounter); switch (segcounter) { case 0: PORTD = ~(SEGMENTE[display_1 % 100000 / 10000]); break; case 1: PORTD = ~((SEGMENTE[display_1 % 10000 / 1000])|0x80); // добавляем десятичную точку break; case 2: PORTD = ~(SEGMENTE[display_1 % 1000 / 100]); break; case 3: PORTD = ~(SEGMENTE[display_1 % 100 / 10]); break; } if ((segcounter++) > 2) segcounter = 0; } /***Главная функция***/ int main (void) { DDRD = 0xFF; DDRB = (1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3); PORTD = 0x00; PORTB = 0x00; TIMSK = (1 << TOIE2); // разрешение прерывания по таймеру2 TCCR2 = (1 << CS21); //предделитель на 8 ADCSRA = (1 << ADEN) // разрешение АЦП |(1 << ADFR) // непрерывный режим работы АЦП |(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0); // предделитель на 64 (частота АЦП 125kHz) ADMUX = (1 << REFS1)|(1 << REFS0)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); _delay_ms(50); sei(); //глобально разрешаем прерывания while (1) { ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования u = (ADCL|ADCH << 8); // Считываем ADC value_1 = value_1 + (u * k/z); adc_counter++; if (adc_counter > 300) { display_1 = (value_1*10/adc_counter); adc_counter = 0; value_1 = 0; _delay_ms(50); g++; if (g > 10) {ADMUX |= (1<<MUX0); k = 5; z = 2;}// переход на АДС1 (выполняется) if (19 < g) {ADMUX &= ~(1<<MUX0); k = 15; z = 4; g = 0;}// переход на АДС0 } } }
  6. помогите у меня сейчас мозг уже взорвется, я не могу понять почему единица записывается в АDMUX |=(1<<MUX0) а нуль нет, после того как там стоит 1... // Использование АЦП. Цифровой вольтамперметр #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //------------------0-----1-----2-----3-----4-----5-----6-----7-----8------9----dp char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80}; volatile unsigned char segcounter = 0; volatile int display_1; volatile unsigned long value_1; unsigned int u, g, t = 0, k = 15, z = 4; volatile unsigned int adc_counter; // Прерывание по переполнению T2, динамическая индикация ISR (TIMER2_OVF_vect) { PORTD = 0xFF; PORTB = (1 << segcounter); switch (segcounter) { case 0: PORTD = ~(SEGMENTE[display_1 % 100000 / 10000]); break; case 1: PORTD = ~((SEGMENTE[display_1 % 10000 / 1000])|0x80); // добавляем десятичную точку break; case 2: PORTD = ~(SEGMENTE[display_1 % 1000 / 100]); break; case 3: PORTD = ~(SEGMENTE[display_1 % 100 / 10]); break; } if ((segcounter++) > 2) segcounter = 0; } /***Главная функция***/ int main (void) { DDRD = 0xFF; DDRB = (1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3); PORTD = 0x00; PORTB = 0x00; TIMSK = (1 << TOIE2); // разрешение прерывания по таймеру2 TCCR2 = (1 << CS21); //предделитель на 8 ADCSRA = (1 << ADEN) // разрешение АЦП |(1 << ADFR) // непрерывный режим работы АЦП |(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0); // предделитель на 64 (частота АЦП 125kHz) ADMUX = (1 << REFS1)|(1 << REFS0)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); _delay_ms(50); sei(); //глобально разрешаем прерывания while (1) { ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования u = (ADCL|ADCH << 8); // Считываем ADC value_1 = value_1 + (u * k/z); adc_counter++; if (adc_counter > 100) { display_1 = (value_1*10/adc_counter); adc_counter = 0; value_1 = 0; _delay_ms(50); g++; if (g > 10) {ADMUX |= (1<<MUX0); k = 5; z = 2;}// переход на АДС1 (выполняется) if (19 < g) {ADMUX |= (0<<MUX0); k = 15; z = 4; g = 0;}// вот здесь должен происходить переход на АДС0, но перехода нет } } } hd44780 я не могу понять предоставленный Вами код, как в этом коде установить канал для чтения? как их менять? с уважением
  7. Как опросить 2 канала ацп котроллера, пример кода для одного канала АЦП как второй канал задействовать, третий и т.п. ? помогите кто чем может, давно уже ищю всю както не конкретно и не понятно, в гугль не отсылать был я там // Использование АЦП. Цифровой вольтметр 02. 03.#include <avr/io.h> 04.#include <avr/interrupt.h> 05.#include <util/delay.h> 06. 07.//------------------0-----1-----2-----3-----4-----5-----6-----7-----8------9----dp 08.char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80}; 09. 10.volatile unsigned char segcounter = 0; 11.volatile int display = 0; 12. 13.// Прерывание по переполнению T2, динамическая индикация 14.ISR (TIMER2_OVF_vect) 15.{ 16.PORTD = 0xFF; 17.PORTB = (1 << segcounter); 18. 19.switch (segcounter) 20.{ 21.case 0: 22.PORTD = ~(SEGMENTE[display % 10000 / 1000]); 23.break; 24.case 1: 25.PORTD = ~((SEGMENTE[display % 1000 / 100])|0x80); // добавляем десятичную точку 26.break; 27.case 2: 28.PORTD = ~(SEGMENTE[display % 100 / 10]); 29.break; 30.} 31.if ((segcounter++) > 2) segcounter = 0; 32.} 33. 34.volatile unsigned long value; 35.volatile unsigned int adc_counter; 36. 37.// Прерывание по окончанию преобразования АЦП 38.ISR (ADC_vect) 39.{ 40.value = value + (ADC*11/4); 41.adc_counter++; 42.} 43. 44.// Главная функция 45.int main (void) 46.{ 47.DDRD = 0xFF; 48.DDRB = (1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3); 49.PORTD = 0x00; 50.PORTB = 0x00; 51.DDRC = 0x00; 52. 53.TIMSK |= (1 << TOIE2); // разрешение прерывания по таймеру2 54.TCCR2 |= (1 << CS21); //предделитель на 8 55. 56.ADCSRA = (1 << ADEN) // разрешение АЦП 57.|(1 << ADSC) // запуск преобразования 58.|(1 << ADFR) // непрерывный режим работы АЦП 59.|(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0) // предделитель на 64 (частота АЦП 125kHz) 60.|(1 << ADIE); // разрешение прерывания 61. 62.ADMUX = (1 << REFS1)|(1 << REFS0) // внутренний ИОН 2,56V 63.|(0 << MUX3)|(0 << MUX2)|(0 << MUX1)|(0 << MUX0); // вход ADC0 64. 65._delay_ms(50); 66. 67.sei(); //глобально разрешаем прерывания 68. 69.while(1) 70.{ 71.if (adc_counter > 300) // вычисляем среднее значение АЦП 72.{ 73.display = value/adc_counter; 74.adc_counter = 0; 75.value = 0; 76.} 77._delay_ms(50); 78.} 79.}
  8. просто ЖЖет!!! :-) просто на накал подай напругу 0,8 переменки будет тебе просто к питанию, только напряженьице надо увеличить а то "индикации" не будет :-)
  9. что все? тема заглохла, а так все начиналось.... МЕХАНИКА для РОБОта - Бобота :-) (за флуд прошу не наказывать)
  10. какой масштаб??? я вас умоляю... не знаете не говорите! :-) 1:48 говорится как "один к сорока восьми" это не что иное как передаточное число этого редуктора, т.е. если входной вал этого редуктора сделает 48 оборотов то выходной вал всего 1 оборот... например у вас есть электродвигатель с частотой вращение 1500 об/мин если вы его напрямую подключите к входному валу редуктора тогда на выходе с редуктора у вас будет 1500/48 = 31.25об/мин Прог для 3D великое множество (я имею ввиду "машиностроительного" уклона) сам лично пользуюсь компасом, солидворксом, автокадом, изучаю т - флекс, имхо компаса выше крыши, прост в освоении полностью на русском
  11. редуктор можно сделать и самому, если есть гора шестерен, с одинаковым модулем, останется сделать только корпус редуктора, из текстолита, получится не плохо, все зависит от качества изготовления. 3Д вам в помощь, ОЧЕНЬ УДОБНАЯ ВЕСЧЬ, СДЕЛАЛ В 3Д ПОТОМ ПОЧТИ НИКАКИХ ПЕРЕДЕЛОК НЕ БУДЕТ!!!
  12. вот пользуйся, хороший магазинчик цены приемлемые http://chipster.ru/catalog/robotech/
  13. Эпсон С43 походу, у меня точно такой же наборчик имеется вот только микруха - драйвер другая... (А66..) две цифры последние не помню, даташит искал на нее долго но так и не нашел...
  14. говорю прошились наверное все фьюзы и этот наверное тоже "RSTDISBL – очень опасный фьюз, ошибочная установка может отключить вывод RESET, после чего пропадет возможность программирования ISP программатором. Бит RSTDISBL превращает вывод RESET в порт ввода-вывода." кто знает когда запускаешь казаму и открываешь окошечко фьюзы - биты, и не нажав кнопочку считать жмем сразу же записать, по умолчанию все галочки сняты (включено) что будет в результате? чип сейчас не читает....
×
×
  • Create New...