TwisteR
Участник-
Постов
15 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о TwisteR
-
Звание
Участник
- День рождения 04.12.1988
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
-
Понятно. Я просто хотел узнать, вдруг конкретно для этого двигателя один вариант управления будет предпочтительнее другого. Если других мнений не будет, остановлюсь на первом варианте схемы :)
-
Да, я тоже над этим думал, хотел поставить драйвер полевых транзисторов для обеспечения полного открытия Q5 с частотой ШИМа, но потом, почитав литературы, понял, что можно обойтись меньшим количеством ключей, разрешая или запрещая передавать управляющие сигналы. Не знал только, какой вариант лучше :unsure:
-
Управление ШДР-721
TwisteR опубликовал тема в Электрические машины, Электропривод и Управление
Здравствуйте, уважаемые спецы! Играюсь с координатным столиком для одного станка, там установлено два шаговых двигателя ШДР-721. Прикинул тут схемку драйвера с регулированием тока в обмотках. Но не могу определиться с методом прерывания фаз — прерывать управляющий сигнал (первый вариант) или же шину питания фаз двигателя (второй)? Как я понял, в этих вариантах различаются лишь контуры рециркуляции обратного тока обмоток. Подскажите, пожалуйста, какой из этих вариантов предпочтительнее для данной модели двигателя? -
Помогите с инициализацией UART
TwisteR ответил TwisteR тема в MCS51, AVR, PIC, STM8, 8bit
Пробовал конечно, но всегда настораживало вот это (вижу, что таблица прерываний, но не понимаю, почему она вся однородная, ведь я использовал одно из них): Disassembly of section .text: 00000000 <__vectors>: 0: 10 c0 rjmp .+32 ; 0x22 <__ctors_end> 2: 17 c0 rjmp .+46 ; 0x32 <__bad_interrupt> 4: 16 c0 rjmp .+44 ; 0x32 <__bad_interrupt> 6: 15 c0 rjmp .+42 ; 0x32 <__bad_interrupt> 8: 14 c0 rjmp .+40 ; 0x32 <__bad_interrupt> a: 13 c0 rjmp .+38 ; 0x32 <__bad_interrupt> c: 12 c0 rjmp .+36 ; 0x32 <__bad_interrupt> e: 11 c0 rjmp .+34 ; 0x32 <__bad_interrupt> 10: 10 c0 rjmp .+32 ; 0x32 <__bad_interrupt> 12: 0f c0 rjmp .+30 ; 0x32 <__bad_interrupt> 14: 0e c0 rjmp .+28 ; 0x32 <__bad_interrupt> 16: 0d c0 rjmp .+26 ; 0x32 <__bad_interrupt> 18: 0c c0 rjmp .+24 ; 0x32 <__bad_interrupt> 1a: 0b c0 rjmp .+22 ; 0x32 <__bad_interrupt> 1c: 0a c0 rjmp .+20 ; 0x32 <__bad_interrupt> 1e: 09 c0 rjmp .+18 ; 0x32 <__bad_interrupt> 20: 08 c0 rjmp .+16 ; 0x32 <__bad_interrupt> Ну, думаю, пускай так и будет (не знал ведь, как оно должно быть на самом деле :cranky: ) Последовал вашему совету (про _vect не знал :( ) и с удивлением обнаружил вот что : 14: 0e c0 rjmp .+28 ; 0x32 <__bad_interrupt> 16: 32 c0 rjmp .+100 ; 0x7c <__vector_11> 18: 0c c0 rjmp .+24 ; 0x32 <__bad_interrupt> Прошил МК и всё заработало 8) Век живи, век учись... Спасибо большое за обьяснение, так и знал, что не до конца разобрался с синтаксисом. В Сети море примеров, но очень мало именно на ассемблере (для GCC). Руководствовался тем, что удалось найти, в частности этой программой генератора простейших сигналов. Как я понял, её автор линкует вручную? -
Помогите с инициализацией UART
TwisteR ответил TwisteR тема в MCS51, AVR, PIC, STM8, 8bit
В начале файла обьявлено: #define GREEN 0b11101111 Следовательно, эта инструкция загружает значение 0b11101111 в регистр led_color (r18), откуда я в основном цикле вывожу его на порт, к которому подпаян трёхцветный светодиод с общим анодом. -
Помогите с инициализацией UART
TwisteR ответил TwisteR тема в MCS51, AVR, PIC, STM8, 8bit
"Это слишком хорошо, чтобы быть правдой" =) UART_RXC: in r19, UDR; reti К сожалению, не помогло :( МК по прежнему виснет при посылке байта на PD0 (RXD). Какие ещё могут быть варианты? -
Помогите с инициализацией UART
TwisteR опубликовал тема в MCS51, AVR, PIC, STM8, 8bit
У меня возник вопрос по инициализации UART в AT90S8535. Компилируется нормально, прошивается тоже. При включении мигает синий светодиод (т.е. нормально функционирует основной цикл программы - LOOP1). Но стоит только послать что то по юарту - МК "виснет" (т.е. вместо загорания зелёного светодиода мигающий синий останавливается в том состоянии, на которое пришллось прерывание). Помогите, пожалуйста, определить, в чём проблема. Подозреваю, что намудрил с инициализацией UART'а... Пишу на ассемблере. Вот текст программы (для компиляции использую AVR GCC, частота кварца 8 МГц). .nolist #define __SFR_OFFSET 0 #include <avr/io.h> #include <avr/interrupt.h> .list #define RED 0b11111011 #define BLUE 0b11110111 #define GREEN 0b11101111 #define OFF 0b11111111 tmp1 = 16 tmp2 = 17 led_color = 18 .global main main: .org 0 rjmp RESET ; Reset Handler reti; EXT_INT0 ; IRQ0 Handler reti; EXT_INT1 ; IRQ1 Handler reti; TIM2_COMP ; Timer2 Compare Handler reti; TIM2_OVF ; Timer2 Overflow Handler reti; TIM1_CAPT ; Timer1 Capture Handler reti; TIM1_COMPA ; Timer1 CompareA Handler reti; TIM1_COMPB ; Timer1 CompareB Handler reti; TIM1_OVF ; Timer1 Overflow Handler reti; TIM0_OVF ; Timer0 Overflow Handler reti; SPI_STC ; SPI Transfer Complete Handler rjmp UART_RXC ; UART RX Complete Handler reti; UART_DRE ; UDR Empty Handler reti; UART_TXC ; UART TX Complete Handler reti; ADC ; ADC Conversion Complete Interrupt reti; EE_RDY ; EEPROM Ready Handler reti; ANA_COMP ; Analog Comparator Handler RESET: ldi tmp1, lo8(RAMEND); Stack setup out SPL, tmp1 ldi tmp1, hi8(RAMEND) out SPH, tmp1 ldi tmp1, 51; set uart baudrate to 9600 baud out UBRR, tmp1 ldi tmp1, (1<<TXEN)|(1<<RXEN)|(1<<RXCIE); enable RXint and enable tx/rx out UCR, tmp1 ser tmp1 out DDRC, tmp1; set all PORTC bits as output ldi led_color, BLUE; turn on blue led by default ldi tmp2, OFF sei ; global enable interrupts LOOP1: out PORTC, led_color; LED on rcall wait_some_time out PORTC, tmp2 ; LED off rcall wait_some_time rjmp LOOP1 ; repeat wait_some_time: push r24 push r25 ldi r24, 0xFF ldi r25, 0xFF wait_some_time_loop: sbiw r24, 1 brne wait_some_time_loop pop r25 pop r24 ret UART_RXC: ldi led_color, GREEN reti -
Помогите опознать фотоэлемент
TwisteR ответил TwisteR тема в Компоненты
Никогда не пользовался современными мультиметрами на пределах > 1 MOм, поэтому навряд результаты измерений верны (В советских авометрах для измерения высоких сопротивлений на клемы дополнительное питание подавалось, а как тут?). Вообщем, вот что я "намерял": На пределе измерений 20 МОм сопротивление фототранзистора от 5 МОм в темноте до 15 на свету (почему возрастает а не падает?) На пределе измерений 2 МОм - от 0.8 в темноте до 1.5 на свету о_О Если сменить полярность подключения - вообще можно отрицательные сопротивления увидеть %) ЭДС эта штука генерит до 0.5 В при полном освещении (и около нуля в темноте). -
Помогите опознать фотоэлемент
TwisteR ответил TwisteR тема в Компоненты
Ладно, фотодиоды пока отложим :) Ибо я нашёл у себя фототранзисторы (как я предполагаю) неизвестного происхождения :) И опять не получилось извлечь из них пользу :( Может ли кто подсказать, что за модель или хотя бы какого производителя? И как с нею работать? Включаю по схеме (второй рисунок) - ничего не происходит... Ни при наведении пульта от телика, ни при освещении ИК-светодиодом (на первом фото - слева), ни при освещении чем либо другим. Заранее спасибо за любую помощь :) -
Помогите опознать фотоэлемент
TwisteR ответил TwisteR тема в Компоненты
О, спасибо за информацию. Вот только мне бы фотоэлементы опознать, светодиодов у меня и так навалом =) -
Помогите опознать фотоэлемент
TwisteR ответил TwisteR тема в Компоненты
Спасибо за ответ, попробую подключить эти штуковины к ОУ, посмотрю, что получится. Вот нашёл ещё таких деталек, подозреваю что это фотодиоды серии ФД, только не могу определить конкретно. С чёрной точкой - какой то светодиод, светился красным, когда я омметром щупал. Заранее спасибо за помощь. -
Помогите опознать фотоэлемент
TwisteR опубликовал тема в Компоненты
Собираю одну схемку, потребовался фототранзистор. За неимением такового решил поискать, чем бы его заменить. И вот что нашёл. На корпусе никаких маркировок. Подключил вольтметр - вблизи источников света генерирует ЭДС около 1 В, реагирует на ИК импульсы от ПДУ телика. В поискал в справочниках похожие чертежи корпуса - ничего не нашел. Помогите опознать фотоэлемент, пожалуйста :) -
МК не отвечает :(
TwisteR ответил TwisteR тема в В помощь начинающему
Если бы я только что то понимал... main.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 0000007c 00000000 00000000 00000054 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .stab 0000036c 00000000 00000000 000000d0 2**2 CONTENTS, READONLY, DEBUGGING 2 .stabstr 00000054 00000000 00000000 0000043c 2**0 CONTENTS, READONLY, DEBUGGING 3 .debug_aranges 00000020 00000000 00000000 00000490 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_pubnames 0000001b 00000000 00000000 000004b0 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_info 0000015d 00000000 00000000 000004cb 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_abbrev 000000c7 00000000 00000000 00000628 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_line 000000e5 00000000 00000000 000006ef 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_frame 00000020 00000000 00000000 000007d4 2**2 CONTENTS, READONLY, DEBUGGING 9 .debug_str 000000ca 00000000 00000000 000007f4 2**0 CONTENTS, READONLY, DEBUGGING 10 .debug_loc 00000018 00000000 00000000 000008be 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 14 c0 rjmp .+40 ; 0x2a <__ctors_end> 2: 2d c0 rjmp .+90 ; 0x5e <__bad_interrupt> 4: 2c c0 rjmp .+88 ; 0x5e <__bad_interrupt> 6: 2b c0 rjmp .+86 ; 0x5e <__bad_interrupt> 8: 2a c0 rjmp .+84 ; 0x5e <__bad_interrupt> a: 29 c0 rjmp .+82 ; 0x5e <__bad_interrupt> c: 28 c0 rjmp .+80 ; 0x5e <__bad_interrupt> e: 27 c0 rjmp .+78 ; 0x5e <__bad_interrupt> 10: 26 c0 rjmp .+76 ; 0x5e <__bad_interrupt> 12: 25 c0 rjmp .+74 ; 0x5e <__bad_interrupt> 14: 24 c0 rjmp .+72 ; 0x5e <__bad_interrupt> 16: 23 c0 rjmp .+70 ; 0x5e <__bad_interrupt> 18: 22 c0 rjmp .+68 ; 0x5e <__bad_interrupt> 1a: 21 c0 rjmp .+66 ; 0x5e <__bad_interrupt> 1c: 20 c0 rjmp .+64 ; 0x5e <__bad_interrupt> 1e: 1f c0 rjmp .+62 ; 0x5e <__bad_interrupt> 20: 1e c0 rjmp .+60 ; 0x5e <__bad_interrupt> 22: 1d c0 rjmp .+58 ; 0x5e <__bad_interrupt> 24: 1c c0 rjmp .+56 ; 0x5e <__bad_interrupt> 26: 1b c0 rjmp .+54 ; 0x5e <__bad_interrupt> 28: 1a c0 rjmp .+52 ; 0x5e <__bad_interrupt> 0000002a <__ctors_end>: 2a: 11 24 eor r1, r1 2c: 1f be out 0x3f, r1 ; 63 2e: cf e5 ldi r28, 0x5F ; 95 30: d2 e0 ldi r29, 0x02 ; 2 32: de bf out 0x3e, r29 ; 62 34: cd bf out 0x3d, r28 ; 61 00000036 <__do_copy_data>: 36: 10 e0 ldi r17, 0x00 ; 0 38: a0 e6 ldi r26, 0x60 ; 96 3a: b0 e0 ldi r27, 0x00 ; 0 3c: ec e7 ldi r30, 0x7C ; 124 3e: f0 e0 ldi r31, 0x00 ; 0 40: 02 c0 rjmp .+4 ; 0x46 <.do_copy_data_start> 00000042 <.do_copy_data_loop>: 42: 05 90 lpm r0, Z+ 44: 0d 92 st X+, r0 00000046 <.do_copy_data_start>: 46: a0 36 cpi r26, 0x60 ; 96 48: b1 07 cpc r27, r17 4a: d9 f7 brne .-10 ; 0x42 <.do_copy_data_loop> 0000004c <__do_clear_bss>: 4c: 10 e0 ldi r17, 0x00 ; 0 4e: a0 e6 ldi r26, 0x60 ; 96 50: b0 e0 ldi r27, 0x00 ; 0 52: 01 c0 rjmp .+2 ; 0x56 <.do_clear_bss_start> 00000054 <.do_clear_bss_loop>: 54: 1d 92 st X+, r1 00000056 <.do_clear_bss_start>: 56: a0 36 cpi r26, 0x60 ; 96 58: b1 07 cpc r27, r17 5a: e1 f7 brne .-8 ; 0x54 <.do_clear_bss_loop> 5c: 01 c0 rjmp .+2 ; 0x60 <main> 0000005e <__bad_interrupt>: 5e: d0 cf rjmp .-96 ; 0x0 <__heap_end> 00000060 <main>: #include <util/delay.h> #define F_CPU 8000000UL // 8 MHz int main(void) // начало основой программы { 60: 8f ef ldi r24, 0xFF ; 255 62: 81 bb out 0x11, r24 ; 17 64: 2f ef ldi r18, 0xFF ; 255 66: e0 e0 ldi r30, 0x00 ; 0 68: f0 e0 ldi r31, 0x00 ; 0 DDRD = 0xff; /* все выводы порта D сконфигурировать как выходы */ while (1) { // Бесконечный цикл PORTD = 0xff; /* установить "1" на всех линиях порта D */ 6a: 22 bb out 0x12, r18 ; 18 milliseconds can be achieved. */ void _delay_loop_2(uint16_t __count) { __asm__ volatile ( 6c: cf 01 movw r24, r30 6e: 01 97 sbiw r24, 0x01 ; 1 70: f1 f7 brne .-4 ; 0x6e <main+0xe> _delay_ms(1000); // Ждем 1 сек. PORTD = 0x00; /* установить "0" на всех линиях порта D */ 72: 12 ba out 0x12, r1 ; 18 74: cf 01 movw r24, r30 76: 01 97 sbiw r24, 0x01 ; 1 78: f1 f7 brne .-4 ; 0x76 <main+0x16> 7a: f7 cf rjmp .-18 ; 0x6a <main+0xa> Пробовал так же этот код: .include "m8535def.inc" .def TMP = R16 .def VERT = R17 .def COUNT1 = R18 .def COUNT2 = R19 .def COUNT3 = R20 .org 0 reset: ldi TMP, 0xFF out DDRD, TMP enable: ldi TMP, 0xFF out PORTD, TMP ldi COUNT3, 16 wait1: dec COUNT1 brne wait1 dec COUNT2 brne wait1 dec COUNT3 brne wait1 disable: ldi TMP, 0x00 out PORTD, TMP ldi COUNT3, 16 wait2: dec COUNT1 brne wait2 dec COUNT2 brne wait2 dec COUNT3 brne wait2 rjmp enable Результат - светодиод горит постоянно, осциллограмма не изменилась. -
МК не отвечает :(
TwisteR ответил TwisteR тема в В помощь начинающему
Спасибо большое, всё заработало. Я думал, что если к XTAL1 и 2 ничего не подключено - будет использоваться встроенный осциллятор. Теперь другой вопрос - нужен ли внешний генератор или кварцевый резонатор, если при программировании я указал частоту встроенного: tfsoft-3 avr # ./avreal-126r0 -p/dev/parport0 -as +ATMEGA8535 -% -o0 -fcksel=4 -w avreal/LINUX - AVR controllers LPT programmer by Redchuk Alexandr v1.26rev0 (Jul 10 2008 17:50:25) http://www.ln.ua/~real/avreal bug-reports, suggestions and so on mail to [email protected] Command: -p/dev/parport0 -as +ATMEGA8535 -o0 -fcksel=4 -w Device connected, MEGA8535 detected Chip not locked Fuses OSCCALs = B1 B2 A8 AB BODLEVEL = 0 BODEN = 0 SUT = 0 CKSEL = 0 BLB1 = 3 BLB0 = 3 S8535C = 1 WDTON = 0 CKOPT = 0 EESAVE = 0 BOOTSZ = 1 BOOTRST = 0 Programming fuses New fuses value OSCCALs = B1 B2 A8 AB BODLEVEL = 0 BODEN = 0 SUT = 0 CKSEL = 4 BLB1 = 3 BLB0 = 3 S8535C = 1 WDTON = 0 CKOPT = 0 EESAVE = 0 BOOTSZ = 1 BOOTRST = 0 Reset pin released Adapter disabled Второй вопрос - почему я в avrdude в терминальном режиме не могу писать в flash avrdude> write flash 0 1 2 3 4 5 6 5 4 3 2 1 0 >>> write flash 0 1 2 3 4 avrdude (write): error writing 0x01 at 0x00000 cell=0xff avrdude (write): error writing 0x02 at 0x00001 cell=0xff avrdude (write): error writing 0x03 at 0x00002 cell=0xff avrdude (write): error writing 0x04 at 0x00003 cell=0xff avrdude (write): error writing 0x05 at 0x00004 cell=0xff avrdude> dump flash 0 16 >>> dump flash 0 200 0000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| А в eeprom - могу. Это при том, что и avrdude, и ponyprog и avreal нормально пишут указанные файлы .hex. Впрочем, это не существенно, т.к. МК программируется нормально. Просто интересно :) И третий вопрос. Я прошил МК простой программкой, вот её код: #include <avr/io.h> #include <util/delay.h> #define F_CPU 8000000UL int main(void) { DDRD = 0xff; while (1) { PORTD = 0xff; _delay_ms(1000); PORTD = 0x00; _delay_ms(1000); } } Подключил к ножке 14 (PD0) светодиод, отключил программатор, но светодиод так и не замигал. Зато на осциллографе я увидел то, что в аттаче. Где моя ошибка? Заранее большое спасибо за ответы. -
МК не отвечает :(
TwisteR опубликовал тема в В помощь начинающему
Приветствую специалистов! Я недавно начал осваивать микроконтроллеры, решил остановиться на линейке AVR. Собрал STK200/300 по этой схеме, купил МК ATmega8535, подключил всё это дело к компу. Какое то время МК нормально определялся (правда, при чтении одних и тех же участков памяти я получал разные данные, но это другая история, подробности тут). Но недавно МК вообще перестал определсятья :( Произошло это во время получения очередной порции "рандомных данных" - в один прекрасный момент вместо беспорядочного набора байт я стал получатьодни 0xFF, а при следующем запуске avrdude и вовсе не обнаружил МК: tfsoft-3 avr # avrdude -p m8535 -c stk200 -t -F avrdude: AVR device not responding avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0xffffff avrdude: Yikes! Invalid device signature. avrdude: Expected signature for ATMEGA8535 is 1E 93 08 avrdude> quit >>> quit avrdude: safemode: Fuses OK avrdude done. Thank you. Пробовал и avreal: tfsoft-3 avr # ./avreal-126r0 -p/dev/parport0 -as +ATMEGA8535 -% -e -! avreal/LINUX - AVR controllers LPT programmer by Redchuk Alexandr v1.26rev0 (Jul 10 2008 17:50:25) http://www.ln.ua/~real/avreal bug-reports, suggestions and so on mail to [email protected] Command: -p/dev/parport0 -as +ATMEGA8535 -% -o1MHZ -e -! % Parallel port `/dev/parport0' found, ioctl interface activated % assume that LPT data writes not faster then 1uS % Atmel adapter for STK*00 found % STK mode % osc = 1000kHz -> setup=2, hold=2,1 % Reset % PgmOn reply FF FF FF FF % Try 1 to resync by reset pulse % PgmOn reply FF FF FF FF % Try 2 to resync by reset pulse % PgmOn reply FF FF FF FF % Try 3 to resync by reset pulse % PgmOn reply FF FF FF FF % Try 4 to resync by reset pulse % PgmOn reply FF FF FF FF Can't resync Reset pin released Adapter disabled По совету с другого форума укоротил шлейф до 10 см и повесил резистор 10К между RESET и VCC, ничего не изменилось. Щупал осциллографом - во время выполнения команды "dump flash 0 20000" на RESET, как и положено - 0, на SCK видны прямоугольные импульсы, на MOSI видна передача данных, а на MISO - глухо. Прикрепляю фото программатора и тестовой платы с МК. Кто подскажет, куда копать и как диагностировать неисправность МК? Буду благодарен за любую помощь :)