Пост N: 70
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг:
0
Отправлено: 22.11.10 17:38. Заголовок: С AVR на PIC
Решили сделать "Журнал Схемотехника №12 за 2005 год и №1 за 2006 год. Статья - С.Калюжный "Преобразователь с выходным напряжением синусоидальной формы" . Инвертор собрали, дошли до формирователя синуса. Собран он на AVR AT90S2313-10PI. В журнале была прошивка, но с ошибками. Часть исправили, но компиляция всё равно не идёт. Может кто работал с AVR? Есть задумка перевести код на PIC. Но для этого нужно знать алгоритм работы. Изучать AVR большого желания нет (тут бы PICи осилить). Может кто имел дело с AVR, можно как-то переложить прошивку на PIC?
.CSEG .INCLUDE "2313def.inc" .org 0 rjmp reset .DEF Step=r30 .DEF Data=r0 .DEF SSREG=r23 .EQU Set_Tabl=16 .EQU Offset=Set_Tabl<<1 .EQU END_Tabl=Offset+196 .org OC1addr rjmp TIM1_COMP .org OVF1addr rjmp TIM1_OvF .CSEG .org 16 SinTab: .DB 5,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 .DB 67,71,75,79,83,86,90,94,98,101,105,109,112,116,119,123 .DB 126,130,133,136,140,143,146,150,153,156,159,162,165,168,171,174 .DB 177,180,183,185,188,191,193,196,198,201,203,206,208,210,212,214 .DB 217,219,221,223,224,226,228,230,231,233,234,236,237,239,240,241 .DB 242,243,244,245,246,247,248,249,249,250,250,251,251,252,252,252 .DB 252,252,253,252,252,252,252,252,251,251,250,250,249,249,248,247 .DB 246,245,244,243,242,241,240,239,237,236,234,233,231,230,228,226 .DB 224,223,221,219,217,214,212,210,208,206,203,201,198,196,193,191 .DB 188,185,183,180,177,174,171,168,165,162,159,156,153,150,146,143 .DB 140,136,133,130,126,123,119,116,112,109,105,101,98,94,90,86 .DB 83,79,75,71,67,64,60,56,52,48,44,40,36,32,28,24 .DB 20,16,12,8,5,255,255,255,255,255,255,255,255,255,255,255 TIM1_COMP: in SSREG, SREG lpm out OCR1AL, Data out SREG, SSREG reti TIM1_OvF: in SSREG, SREG inc Step out SREG, SSREG reti reset: clr r31 ldi Step=Offset ldi r20, 0xdf out SPL, r20 ldi r20, 0xfc out DDRB, r20 ldi r20, 0xf0 out PORTB, r20 ldi r20, 0x72 out DDRD, r20 ldi r20, 0x3f out PORTD, r20 ldi r20, 0x00 out MCUCR, r20 ldi r20, 0x00 out GIFR, r20 ldi r20, 0x00 out 0CR1AH, r20 ldi r20, 16 out 0CR1AL, r20 ldi r20,0xC0 out TIMSK, r20 ldi r20, 0xB1 out TCCR1A, r20 ldi r20, 0x04 out PORTB, r20 WDR ldi r20, 0x00 out WDTCR, r20 ldi r20, 0x01 out TCCR1B, r20 cbi PORTD, 6 cbi PORTB, 3 sei m1: cpi Step=END_Tabl breq m2 rjmp m1 m2: cli wdr ldi Step=Offset sbic PORTB, 7 rjmp m3 sbis PORTB, 7 rjmp m4 m3: cbi PORTB, 7 sei rjmp m1 m4: sbi PORTB, 7 sei rjmp m1
Мне кажется синтаксис не соответствует. Набрано было от сюда <\/u><\/a>
Пост N: 1349
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
3
Фото:
Отправлено: 22.11.10 18:13. Заголовок: По всей видимости си..
По всей видимости синусоида сформирована при помощи ШИМ. Таблица, это действительно таблица синусов для одного полупериода... Были заранее вычислены значения, округлены и тупо записаны таблицей. Какая частота ШИМ не знаю, но в промышленных ИБП именно этот принцип и применяется. Да и по другому получить более менее синус затруднительно. В этом случае на входе инвертора или скорее на выходе должны стоять фильтры. если есть, то это Однозначно шим. Переложить на ПИКи... Проще свою программу написать. Всего надо настроить модуль ССР и по таблице в нужный момент выдать длительность импульса. Насколько я понял здесь 196 отсчетов сигнала, соответственно надо выбрать частоту ШИМ 9800 Гц... Если конечно правильно посчитал 1/(1/50/196)(Кстати, здесь скорее всего именно это частота и используется). Можно поиграться количеством отсчетов, чтобы более менее подобрать частоту. Принцип построения прост, каждый период ШИМ должен отрабатывать только одно значение таблицы, в следующем периоде ШИМ должно быть следующее значение...Трех фазный я бы скорее всего уже строил на другом принципе, по всей видимости уже с задействованием таймера или даже трех...
Пост N: 71
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг:
0
Отправлено: 22.11.10 18:32. Заголовок: В общих чертах так и..
В общих чертах так и происходит. Для начала хочется проверить в железе, будет ли работать. Прошить не удаётся из за ошибок в листинге (они есть точно). Для этого нужно его проверить, но не зная команд для AVR это трудновато, вот и прошу помощи у тех, кто знаком с ними. Схемы есть, могу выложить всю статью. 12-220<\/u><\/a>
OUT это команда вывода в регистр ввода вывода... По нашему это РСН. R20 это рабочий регистр, подобие нашего аккумулятора. Их там целая куча аж 32 штуки, последние шесть это косвенная адресация по два байта... Также могут использоваться как рабочие. Вывод из регистра на который они указывают идут также в эти рабочие регистры, в первой половине, по моему в r1-r3, но это лучше уточнить. Думаю теперь догадаетесь, что вместо 0 надо поставить букву "О". Этот регистр описан в файле "2313def.inc"
Пост N: 74
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг:
0
Отправлено: 22.11.10 19:00. Заголовок: Алексей пишет: вмес..
Алексей пишет:
цитата:
вместо 0 надо поставить букву "О"
Получилось. Постараюсь алгоритм работы проследить. C:\Program Files\Atmel\SINUS\SINUS.asm(96): No EEPROM data, deleting C:\Program Files\Atmel\SINUS\SINUS.eep Что это значит?
C:\Program Files\Atmel\SINUS\SINUS.asm(96): No EEPROM data, deleting C:\Program Files\Atmel\SINUS\SINUS.eep
У него ее просто нет ... Алгоритм очень просто, используется таймер в режиме ШИМ. Это аналог ССР модуля... Т.е. если задействовать модуль программа получится практически один в один, только меньше
Пост N: 270
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг:
1
Отправлено: 26.11.10 18:47. Заголовок: Алексей пишет: У не..
Алексей пишет:
цитата:
У него ее просто нет ...
Позволю себе Вас немного поправить. EEPROM в AT90S2313 есть, 128 байт. А то, что avrassembler выдал "C:\Program Files\Atmel\SINUS\SINUS.asm(96): No EEPROM data, deleting C:\Program Files\Atmel\SINUS\SINUS.eep" это говорит о том, что в исходнике не встретился сегмент EEPROM (объявляется директивой .eseg) и соответственно создавать файл SINUS.eep нет практического смысла и он его просто удалил (хотя в параметрах компиляции указано, что нужно его создать).
Пост N: 76
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг:
0
Отправлено: 26.11.10 19:15. Заголовок: Rimsky спасибо за ин..
Rimsky спасибо за инфу. А есть вообще проги по переводу кода с AVR на PIC? В авр студии проект пошёл, пробую в протеусе прогнать, но раньше с ним не работал. Буду изучать и пробовать. По ощущению должно всё получиться.
Пост N: 271
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг:
1
Отправлено: 26.11.10 19:24. Заголовок: SanSanich пишет: А ..
SanSanich пишет:
цитата:
А есть вообще проги по переводу кода с AVR на PIC? В авр студии проект пошёл, пробую в протеусе прогнать, но раньше с ним не работал. Буду изучать и пробовать. По ощущению должно всё получиться.
Программ таких честно говоря не встречал. Все придется делать ручками. Вообще лично у меня по времени примерно месяц заняло освоение avr ассемблера, ничего там сложного нет. Если что, пиши поможем!
Все даты в формате GMT
3 час. Хитов сегодня: 33
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет