АвторСообщение
администратор




Пост 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>

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]


постоянный участник


Пост N: 1349
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 18:13. Заголовок: По всей видимости си..


По всей видимости синусоида сформирована при помощи ШИМ. Таблица, это действительно таблица синусов для одного полупериода... Были заранее вычислены значения, округлены и тупо записаны таблицей. Какая частота ШИМ не знаю, но в промышленных ИБП именно этот принцип и применяется. Да и по другому получить более менее синус затруднительно. В этом случае на входе инвертора или скорее на выходе должны стоять фильтры. если есть, то это Однозначно шим. Переложить на ПИКи... Проще свою программу написать. Всего надо настроить модуль ССР и по таблице в нужный момент выдать длительность импульса. Насколько я понял здесь 196 отсчетов сигнала, соответственно надо выбрать частоту ШИМ 9800 Гц... Если конечно правильно посчитал 1/(1/50/196)(Кстати, здесь скорее всего именно это частота и используется). Можно поиграться количеством отсчетов, чтобы более менее подобрать частоту. Принцип построения прост, каждый период ШИМ должен отрабатывать только одно значение таблицы, в следующем периоде ШИМ должно быть следующее значение...Трех фазный я бы скорее всего уже строил на другом принципе, по всей видимости уже с задействованием таймера или даже трех...

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1350
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 18:23. Заголовок: На что кстати, ругае..


На что кстати, ругается компилятор???

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 71
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.11.10 18:32. Заголовок: В общих чертах так и..


В общих чертах так и происходит. Для начала хочется проверить в железе, будет ли работать. Прошить не удаётся из за ошибок в листинге (они есть точно). Для этого нужно его проверить, но не зная команд для AVR это трудновато, вот и прошу помощи у тех, кто знаком с ними. Схемы есть, могу выложить всю статью.
12-220<\/u><\/a>

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 72
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.11.10 18:36. Заголовок: На синтаксис. Вот ту..


На синтаксис.
Вот тут
out 0CR1AL, r20
В тексте так и написано, в командах я не нашёл и похожее

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1351
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 18:48. Заголовок: :sm15: :sm..


OUT это команда вывода в регистр ввода вывода... По нашему это РСН. R20 это рабочий регистр, подобие нашего аккумулятора. Их там целая куча аж 32 штуки, последние шесть это косвенная адресация по два байта... Также могут использоваться как рабочие. Вывод из регистра на который они указывают идут также в эти рабочие регистры, в первой половине, по моему в r1-r3, но это лучше уточнить. Думаю теперь догадаетесь, что вместо 0 надо поставить букву "О". Этот регистр описан в файле "2313def.inc"

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 73
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.11.10 18:50. Заголовок: Методом подбора врод..


Методом подбора вроде прошло, вот что сообщило
AVRASM: AVR macro assembler 2.1.9 (build 90 Jul 5 2006 11:06:16)
Copyright (C) 1995-2006 ATMEL Corporation
C:\Program Files\Atmel\SINUS\SINUS.asm(2): Including file 'C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\2313def.inc'
C:\Program Files\Atmel\SINUS\SINUS.asm(5): warning: Register r30 already defined by the .DEF directive
C:\Program Files\Atmel\SINUS\SINUS.asm(96): No EEPROM data, deleting C:\Program Files\Atmel\SINUS\SINUS.eep
AT90S2313 memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000166 124 208 332 2048 16.2%
[.dseg] 0x000060 0x000060 0 0 0 128 0.0%
[.eseg] 0x000000 0x000000 0 0 0 128 0.0%
Assembly complete, 0 errors. 1 warnings


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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
Что это значит?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1352
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 19:00. Заголовок: SanSanich пишет: В ..


SanSanich пишет:

 цитата:
В общих чертах так и происходит

Судя по осциллограммам именно так оно и есть, вот только полупериоды можно формировать программно, а не аппаратно...

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1353
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 19:06. Заголовок: SanSanich пишет: C:..


SanSanich пишет:

 цитата:
C:\Program Files\Atmel\SINUS\SINUS.asm(96): No EEPROM data, deleting C:\Program Files\Atmel\SINUS\SINUS.eep

У него ее просто нет ... Алгоритм очень просто, используется таймер в режиме ШИМ. Это аналог ССР модуля... Т.е. если задействовать модуль программа получится практически один в один, только меньше

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 75
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.11.10 19:20. Заголовок: Вот какой исходник п..


Вот какой исходник получился.
.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 OCR1AL, r20
ldi r20, 16
out OCR1AL, 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1354
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 22.11.10 21:10. Заголовок: Случайно наткнулся, ..


Случайно наткнулся, может пригодится http://eldigi.ru/site/power/13.php<\/u><\/a>

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 нет практического смысла и он его просто удалил (хотя в параметрах компиляции указано, что нужно его создать).

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 76
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.11.10 19:15. Заголовок: Rimsky спасибо за ин..


Rimsky спасибо за инфу. А есть вообще проги по переводу кода с AVR на PIC? В авр студии проект пошёл, пробую в протеусе прогнать, но раньше с ним не работал. Буду изучать и пробовать. По ощущению должно всё получиться.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 271
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.11.10 19:24. Заголовок: SanSanich пишет: А ..


SanSanich пишет:

 цитата:
А есть вообще проги по переводу кода с AVR на PIC? В авр студии проект пошёл, пробую в протеусе прогнать, но раньше с ним не работал. Буду изучать и пробовать. По ощущению должно всё получиться.


Программ таких честно говоря не встречал. Все придется делать ручками. Вообще лично у меня по времени примерно месяц заняло освоение avr ассемблера, ничего там сложного нет. Если что, пиши поможем!

Rimsky Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 272
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.11.10 19:29. Заголовок: P.S. AVR более гибки..


P.S. AVR более гибкие в плане программирования, чем то отдаленно напоминают пики 18 серии

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1358
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 27.11.10 01:41. Заголовок: Rimsky пишет: P.S. ..


Rimsky пишет:

 цитата:
P.S. AVR более гибкие в плане программирования, чем то отдаленно напоминают пики 18 серии

Скорее DSPICи, 18 и близко не стояли... Вот здесь действительно сходство сильное, только в ДСПиках есть еще DSP ядро...

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 4
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия