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

TwisteR

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

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Понятно. Я просто хотел узнать, вдруг конкретно для этого двигателя один вариант управления будет предпочтительнее другого. Если других мнений не будет, остановлюсь на первом варианте схемы :)
  2. Да, я тоже над этим думал, хотел поставить драйвер полевых транзисторов для обеспечения полного открытия Q5 с частотой ШИМа, но потом, почитав литературы, понял, что можно обойтись меньшим количеством ключей, разрешая или запрещая передавать управляющие сигналы. Не знал только, какой вариант лучше :unsure:
  3. Здравствуйте, уважаемые спецы! Играюсь с координатным столиком для одного станка, там установлено два шаговых двигателя ШДР-721. Прикинул тут схемку драйвера с регулированием тока в обмотках. Но не могу определиться с методом прерывания фаз — прерывать управляющий сигнал (первый вариант) или же шину питания фаз двигателя (второй)? Как я понял, в этих вариантах различаются лишь контуры рециркуляции обратного тока обмоток. Подскажите, пожалуйста, какой из этих вариантов предпочтительнее для данной модели двигателя?
  4. Пробовал конечно, но всегда настораживало вот это (вижу, что таблица прерываний, но не понимаю, почему она вся однородная, ведь я использовал одно из них): 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). Руководствовался тем, что удалось найти, в частности этой программой генератора простейших сигналов. Как я понял, её автор линкует вручную?
  5. В начале файла обьявлено: #define GREEN 0b11101111 Следовательно, эта инструкция загружает значение 0b11101111 в регистр led_color (r18), откуда я в основном цикле вывожу его на порт, к которому подпаян трёхцветный светодиод с общим анодом.
  6. "Это слишком хорошо, чтобы быть правдой" =) UART_RXC: in r19, UDR; reti К сожалению, не помогло :( МК по прежнему виснет при посылке байта на PD0 (RXD). Какие ещё могут быть варианты?
  7. У меня возник вопрос по инициализации 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
  8. Никогда не пользовался современными мультиметрами на пределах > 1 MOм, поэтому навряд результаты измерений верны (В советских авометрах для измерения высоких сопротивлений на клемы дополнительное питание подавалось, а как тут?). Вообщем, вот что я "намерял": На пределе измерений 20 МОм сопротивление фототранзистора от 5 МОм в темноте до 15 на свету (почему возрастает а не падает?) На пределе измерений 2 МОм - от 0.8 в темноте до 1.5 на свету о_О Если сменить полярность подключения - вообще можно отрицательные сопротивления увидеть %) ЭДС эта штука генерит до 0.5 В при полном освещении (и около нуля в темноте).
  9. Ладно, фотодиоды пока отложим :) Ибо я нашёл у себя фототранзисторы (как я предполагаю) неизвестного происхождения :) И опять не получилось извлечь из них пользу :( Может ли кто подсказать, что за модель или хотя бы какого производителя? И как с нею работать? Включаю по схеме (второй рисунок) - ничего не происходит... Ни при наведении пульта от телика, ни при освещении ИК-светодиодом (на первом фото - слева), ни при освещении чем либо другим. Заранее спасибо за любую помощь :)
  10. О, спасибо за информацию. Вот только мне бы фотоэлементы опознать, светодиодов у меня и так навалом =)
  11. Спасибо за ответ, попробую подключить эти штуковины к ОУ, посмотрю, что получится. Вот нашёл ещё таких деталек, подозреваю что это фотодиоды серии ФД, только не могу определить конкретно. С чёрной точкой - какой то светодиод, светился красным, когда я омметром щупал. Заранее спасибо за помощь.
  12. Собираю одну схемку, потребовался фототранзистор. За неимением такового решил поискать, чем бы его заменить. И вот что нашёл. На корпусе никаких маркировок. Подключил вольтметр - вблизи источников света генерирует ЭДС около 1 В, реагирует на ИК импульсы от ПДУ телика. В поискал в справочниках похожие чертежи корпуса - ничего не нашел. Помогите опознать фотоэлемент, пожалуйста :)
  13. Если бы я только что то понимал... 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 Результат - светодиод горит постоянно, осциллограмма не изменилась.
  14. Спасибо большое, всё заработало. Я думал, что если к 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) светодиод, отключил программатор, но светодиод так и не замигал. Зато на осциллографе я увидел то, что в аттаче. Где моя ошибка? Заранее большое спасибо за ответы.
  15. Приветствую специалистов! Я недавно начал осваивать микроконтроллеры, решил остановиться на линейке 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 - глухо. Прикрепляю фото программатора и тестовой платы с МК. Кто подскажет, куда копать и как диагностировать неисправность МК? Буду благодарен за любую помощь :)
×
×
  • Создать...