Собственно я имел в виду, что взяв данное устройство либо устройство предложенное PB_EXPERT за основу, можно написать управляющую программу для компьютера, работающую с данным простым устройством. Позже можно будет расширить аппаратную часть, когда более - менее разберетесь.
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 20:23:46
Потрогал лапой паяльник
Зарегистрирован: Вс мар 30, 2008 14:31:51 Сообщений: 331
Рейтинг сообщения:0
Цитата:
А для написания программы микроконтроллера достаточно знать бейсика или же программа там пишется исключительно на ассемблере?
Можно писать на бейсике. Для PIC это mikroBasic (у него есть библиотека функций, для создания HID устройства. Пробовал создавать устройства - работают ). Для AVR, это BASCOM.
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 20:37:02
Родился
Зарегистрирован: Вт май 18, 2010 11:07:19 Сообщений: 19
Рейтинг сообщения:0
Yftul писал(а):
Собственно я имел в виду, что взяв данное устройство либо устройство предложенное PB_EXPERT за основу, можно написать управляющую программу для компьютера, работающую с данным простым устройством. Позже можно будет расширить аппаратную часть, когда более - менее разберетесь.
А какой именно микроконтроллер, по своему опыту, можете предложить использовать?
PB_EXPERT писал(а):
Цитата:
А для написания программы микроконтроллера достаточно знать бейсика или же программа там пишется исключительно на ассемблере?
Можно писать на бейсике. Для PIC это mikroBasic (у него есть библиотека функций, для создания HID устройства. Пробовал создавать устройства - работают ). Для AVR, это BASCOM.
С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 20:51:49
Потрогал лапой паяльник
Зарегистрирован: Вс мар 30, 2008 14:31:51 Сообщений: 331
Рейтинг сообщения:0
memento писал(а):
С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит
Частично совместимы. То есть, основы очень похожы, а дальше есть отличия. В бейсике для МК есть команды для работы с I2C, SPI, 1-Wire устройствами, которых в компе нет, поэтому в бейсике для компа, нет таких команд, но зато есть команды для создания окон, меню, чего нет в контроллерах.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Вопрос сложный:) проще всего наверное будет освоить AVR, тем более что пара схем у Вас практически есть, да и программатор для него схемой повторяет одно из устройств, которые Вам все равно делать придется. Но в любом случае это не более чем мое имхо.
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 21:13:24
Родился
Зарегистрирован: Вт май 18, 2010 11:07:19 Сообщений: 19
Рейтинг сообщения:0
Yftul писал(а):
Вопрос сложный:) проще всего наверное будет освоить AVR, тем более что пара схем у Вас практически есть, да и программатор для него схемой повторяет одно из устройств, которые Вам все равно делать придется. Но в любом случае это не более чем мое имхо.
Вашему ИМХУ я, в этом вопросе, доверяю больше, чем своему. а расширить количество входов-выходов будет сложно в дальнейшем или это решится лишь добавлением ещё одного МК?
PB_EXPERT писал(а):
memento писал(а):
С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит
Частично совместимы. То есть, основы очень похожы, а дальше есть отличия. В бейсике для МК есть команды для работы с I2C, SPI, 1-Wire устройствами, которых в компе нет, поэтому в бейсике для компа, нет таких команд, но зато есть команды для создания окон, меню, чего нет в контроллерах.
эти слова сейчас для меня ничего, надеюсь пока, не значат. Буду учиться программировать, паять уже умею.
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 21:29:10
Потрогал лапой паяльник
Зарегистрирован: Вс мар 30, 2008 14:31:51 Сообщений: 331
Рейтинг сообщения:0
Цитата:
а расширить количество входов-выходов будет сложно в дальнейшем или это решится лишь добавлением ещё одного МК
Не обязательно МК. Расширитель выходов можно сделать на основе микросхемы 74HC595N. Стоят они копейки и их программировать не нужно. Если включить последовательно 10 таких микросхем, можно получить 80 выходов, задействовав всего 3 вывода МК.
PB_EXPERT Не встречали HID компонентов для Delphi случайно? Или может примеров для FASM? Правда я уже забыл когда последний раз программировал и на том и на другом а слово BASIC (именно так, большими буквами) вызывает стойкий рвотный рефлекс .
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 22:15:00
Потрогал лапой паяльник
Зарегистрирован: Вс мар 30, 2008 14:31:51 Сообщений: 331
Рейтинг сообщения:0
Yftul писал(а):
PB_EXPERT Не встречали HID компонентов для Delphi случайно?
Посмотри здесь viewtopic.php?f=20&t=15405&start=100 Там есть DLLка для работры с HID. На бейсике написана. А на предыдущих страницах темы, есть упоминание про дельфи.
ИМХО хватит плодить быдлокодеров - не стоит замусоривать мозг Basic'ом. Лучше сразу изучать С для ПК и МК и ассемблер для МК - без знания специфического ассемблера невозможно достаточно хорошо изучить архитектуру МК и писать эффективные программы (и вообще понимать, что к чему), а про реализацию USB (и четких временных интервалов вообще) на бейсике можно просто забыть. Максимум, для чего он пригоден - мигалки и свистелки. Ассемблер нужен для понимания процессов, происходящих в железе, да и небольшие программы для МК гораздо удобнее писать на нем, а начинать так вообще однозначно надо с него, иначе выйдет быдлокодер. Под С есть куча библиотек, в частности и реализации USB-HID, хотя я предпочитаю общаться с USB с помощью FT232 и ей подобных микросхем.
Кратко:
Для ПК - C/C++; Для МК - ассемблер (для обучения и небольших проектов, типа той же мигалки, также для критических участков кода); С (для более серьезных проектов, либо когда есть желание воспользоваться готовой библиотекой для чего-либо).
Кстати, тот же AVR-GCC генерит довольно приличный и компактный код. Но повторяю - начинать изучать МК надо ТОЛЬКО С АССЕМБЛЕРА (и да, ассемблер х86 тоже хорошо бы знать, хотя бы на уровне mov/out/in), и только потом переходить на С и все остальное.
А Бэйсики, Алгоритмбилдеры и прочую туфту - фтопку. На код, который генерят эти компиляторы, невозможно смотреть без слез. Кстати, это же относится и к CodeVisionAVR. Так что, либо IAR, либо AVR-GCC.
И вообще, любые упрощатели (в частности, автоматические кодогенераторы) можно использовать только тогда, когда четко представляешь, как этого же достичь руками, и можешь при случае поправить код. Иначе в 99% случаев получается быдлокод, а программа приобретает глючность, и служит поводом создания таких тем - viewtopic.php?f=17&t=29144 . Объясняй потом человеку, что это не микроконтроллеры не заслуживают доверия, а программист начинал изучение не с ассемблера, а с какого-нибудь алгоритмбилдера, и на нем же писал систему, что привело к тому, что логика уделывает микроконтроллер.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Кстати, тот же AVR-GCC генерит довольно приличный и компактный код.
Да? А вы сравнивали коды, созданные с помощью AVR-GCC и FastAVR (бейсик)? Если нет, то рекомендую это сделать и не писать того, что вы не знаете!
Цитата:
А Бэйсики, Алгоритмбилдеры и прочую туфту - фтопку. На код, который генерят эти компиляторы, невозможно смотреть без слез.
Читайте выше.
Вывод. Не пишите того, чего не знаете! И помните, "Бейсик" это лишь название языка, а основные возможности зависят от компилятора и имеющихся библиотек!
Истинная правда. Только вот чем ниже порог вхождения (и чем терпимее компилятор относится к ошибкам, что, кстати, взаимосвязано), тем их больше...
Цитата:
Это всего лишь ваше ИМХО!
Я где-то утверждал обратное? Отнюдь не претендуя на истину в последней инстанции, скажу, что я в своей жизни писал на Паскале, Си, Ассемблере, ради интереса ковырял Бейсик, Аду (да, и ее тоже ). Интересовался Джавой (правда, когда я вижу SunSpot, у меня начинаются легкие рвотные позывы и появляется навязчивое желание перепрошить его ). Были времена, когда я был ярым сторонником Паскаля. Но со временем я пришел к озвученной мной позиции - это результат опыта.
Цитата:
Вот вам USB HID термометр на бейсике (BASCOM)
А ничего, что там один модуль на асме написан? А основная программа на бейсике к нему всего лишь обращается?
Цитата:
Библиотека написана на чистом бейсике
Э, так это либа для ПК. Там точных таймингов и не надо - аппаратура все сделает. Это уже абстракция, тут хоть на Хаскеле пиши...
Цитата:
А вы сравнивали коды, созданные с помощью AVR-GCC и FastAVR (бейсик)?
Давайте устроим простенький контест - я напишу простейший бегущий огонек на С (AVR-GCC) и ассемблере под AVR (с использованием таймера), а Вы на Бейсике в Вашем любимом компиляторе. И сравним ассемблерные листинги... OK?
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Заголовок сообщения: Re: программа оболочка для win и программирование
Добавлено: Пт май 28, 2010 09:30:39
Потрогал лапой паяльник
Зарегистрирован: Вс мар 30, 2008 14:31:51 Сообщений: 331
Рейтинг сообщения:0
Цитата:
Только вот чем ниже порог вхождения (и чем терпимее компилятор относится к ошибкам, что, кстати, взаимосвязано), тем их больше
Си - компилятор иногда такие ошибки "проглатывает" и даже не "давится"... Найти их бывает не просто!
Цитата:
А ничего, что там один модуль на асме написан?
А ничего что в проекте V-USB тоже присутсвует модуль на асме, отвечающий за работу с USB, а прога на Си лишь обращается к нему?
Цитата:
тут хоть на Хаскеле пиши
Очень интересно на это бы взглянуть.
Цитата:
Давайте устроим простенький контест - я напишу простейший бегущий огонек на С (AVR-GCC) и ассемблере под AVR (с использованием таймера), а Вы на Бейсике в Вашем любимом компиляторе.
Давайте, только где я написал что FastAVR мой любимый компилятор? Я лишь указал что он создаёт довольно оптимальный код.
Си - компилятор иногда такие ошибки "проглатывает" и даже не "давится"...
Я имел в виду способность компилятора делать из быдлокода работающую программу. Да, компилятор С проглатывает ошибки. Да только вот скомпилированная программа с ошибками работать не будет, и это заставляет человека искать ошибки и проводить оптимизацию/исправление ошибок, более широко говоря - развиваться и совершенствоваться, углублять понимание. А зачем в чем-то разбираться, когда компилятор в любом случае сделает из тотальной жути что-то работающее?
Итак, начнем. Код простого бегущего огонька на ассемблере.
.CSEG .ORG 0x0000 rjmp _Reset .ORG INT0addr reti .ORG INT1addr reti .ORG OC2addr reti .ORG OVF2addr reti .ORG ICP1addr reti .ORG OC1Aaddr reti .ORG OC1Baddr reti .ORG OVF1addr rjmp IntN8
_Reset: ldi yl,byte1(RAMEND) out SPL,yl ldi yh,byte2(RAMEND) out SPL+1,yh sbiw yl,32
1. У ATmega8 меньше прерываний, что дает выигрыш в суммарном объеме кода за счет меньшей ТВП; 2. У ATmega8 8K Flash, а у ATmega48 - 4K. Очевидно, объем кода в процентах будет меньше. 3. Вы использовали прерывание по переполнению, что, опять же, дало выигрыш в несколько команд на инициализации.
Несколько замечаний по ассемблерному листингу, полученному из программы на бейсике:
1. Программа использует оперативную память, что в таком простом случае явно излишне. 2. Прокомментирую листинг:
.CSEG .ORG 0x0000 rjmp _Reset .ORG INT0addr reti .ORG INT1addr reti .ORG OC2addr reti .ORG OVF2addr reti .ORG ICP1addr reti .ORG OC1Aaddr reti .ORG OC1Baddr reti .ORG OVF1addr rjmp IntN8
_Reset: ldi yl,byte1(RAMEND) out SPL,yl ldi yh,byte2(RAMEND) out SPL+1,yh sbiw yl,32
;****** USERS BASIC CODE **********************
;-Line--0009----Led = 1-- ldi zl,byte1(1) sts led,zl [color=red]; из-за того, что переменная заведена в памяти, для каждого обращения к ней требуется две инструкции[/color]
;-Line--0010----DDRD=&hFF-- ldi zl,byte1(255) out DDRD,zl
;-Line--0011----PORTD=1-- ldi zl,byte1(1) out PORTD,zl
;-Line--0013----$Timer1=Timer , Prescale=64--
;-Line--0014----Enable Ovf1-- in zl,TIMSK [color=red]; бесполезная инструкция[/color] sbr zl,0x04 out TIMSK,zl
;-Line--0015----Enable Interrupts-- sei
;-Line--0016----Start Timer1-- in zl,TCCR1B [color=red]; бесполезная инструкция[/color] sbr zl,3 out TCCR1B,zl
;-Line--0018----Do ' place your code in next line-- L0000:
;-Line--0019----Loop-- rjmp L0000 L0001:
;-Line--0021----Interrupt Ovf1()--
;-Line--0022----Rotate(Left, 1, Led)-- IntN8: in r2,SREG [color=red];бесполезная инструкция[/color] lds zl,led ldi r24,1 Call _RotBL [color=red]; теряем время на вызове процедуры[/color] sts led,zl
;-Line--0023----PORTD=Led-- lds zl,led out PORTD,zl
;-Line--0024----End Interrupt-- out SREG,r2 [color=red];бесполезная инструкция[/color] reti
;****** END OF USER BASIC CODE ****************
;////// RotateLeftByte //////////////////// _RotBL: lsl zl [color=red]; вся эта жуть по-хорошему заменяется командами ROR/ROL. Неоптимальный код.[/color] brcc _RtBL1 sbr zl,1 _RtBL1: dec r24 brne _RotBL ret
;System Global Variables: 0 bytes ;User Global Variables: 1 bytes
+00000000: C019 RJMP PC+0x001A Relative jump +00000001: C033 RJMP PC+0x0034 Relative jump +00000002: C032 RJMP PC+0x0033 Relative jump +00000003: C031 RJMP PC+0x0032 Relative jump +00000004: C030 RJMP PC+0x0031 Relative jump +00000005: C02F RJMP PC+0x0030 Relative jump +00000006: C02E RJMP PC+0x002F Relative jump +00000007: C02D RJMP PC+0x002E Relative jump +00000008: C02C RJMP PC+0x002D Relative jump +00000009: C02B RJMP PC+0x002C Relative jump +0000000A: C02A RJMP PC+0x002B Relative jump +0000000B: C02A RJMP PC+0x002B Relative jump +0000000C: C028 RJMP PC+0x0029 Relative jump +0000000D: C027 RJMP PC+0x0028 Relative jump +0000000E: C026 RJMP PC+0x0027 Relative jump +0000000F: C025 RJMP PC+0x0026 Relative jump +00000010: C024 RJMP PC+0x0025 Relative jump +00000011: C023 RJMP PC+0x0024 Relative jump +00000012: C022 RJMP PC+0x0023 Relative jump +00000013: C021 RJMP PC+0x0022 Relative jump +00000014: C020 RJMP PC+0x0021 Relative jump +00000015: C01F RJMP PC+0x0020 Relative jump +00000016: C01E RJMP PC+0x001F Relative jump +00000017: C01D RJMP PC+0x001E Relative jump +00000018: C01C RJMP PC+0x001D Relative jump +00000019: C01B RJMP PC+0x001C Relative jump +0000001A: 2411 CLR R1 Clear Register +0000001B: BE1F OUT 0x3F,R1 Out to I/O location +0000001C: EFCF SER R28 Set Register +0000001D: E0D2 LDI R29,0x02 Load immediate +0000001E: BFDE OUT 0x3E,R29 Out to I/O location +0000001F: BFCD OUT 0x3D,R28 Out to I/O location +00000020: E011 LDI R17,0x01 Load immediate +00000021: E0A0 LDI R26,0x00 Load immediate +00000022: E0B1 LDI R27,0x01 Load immediate +00000023: ECE4 LDI R30,0xC4 Load immediate +00000024: E0F0 LDI R31,0x00 Load immediate +00000025: C002 RJMP PC+0x0003 Relative jump +00000026: 9005 LPM R0,Z+ Load program memory and postincrement +00000027: 920D ST X+,R0 Store indirect and postincrement +00000028: 30A0 CPI R26,0x00 Compare with immediate +00000029: 07B1 CPC R27,R17 Compare with carry +0000002A: F7D9 BRNE PC-0x04 Branch if not equal +0000002B: E011 LDI R17,0x01 Load immediate +0000002C: E0A0 LDI R26,0x00 Load immediate +0000002D: E0B1 LDI R27,0x01 Load immediate +0000002E: C001 RJMP PC+0x0002 Relative jump +0000002F: 921D ST X+,R1 Store indirect and postincrement +00000030: 30A0 CPI R26,0x00 Compare with immediate +00000031: 07B1 CPC R27,R17 Compare with carry +00000032: F7E1 BRNE PC-0x03 Branch if not equal +00000033: D018 RCALL PC+0x0019 Relative call subroutine +00000034: C02B RJMP PC+0x002C Relative jump +00000035: CFCA RJMP PC-0x0035 Relative jump @00000036: __vector_11 ---- expgcc.c ---------- 7: { +00000036: 921F PUSH R1 Push register on stack +00000037: 920F PUSH R0 Push register on stack +00000038: B60F IN R0,0x3F In from I/O location +00000039: 920F PUSH R0 Push register on stack +0000003A: 2411 CLR R1 Clear Register +0000003B: 938F PUSH R24 Push register on stack 8: TCNT1=0; +0000003C: 92100085 STS 0x0085,R1 Store direct to data space +0000003E: 92100084 STS 0x0084,R1 Store direct to data space 10: PORTB=LED; +00000040: 2F80 MOV R24,R16 Copy register +00000041: B905 OUT 0x05,R16 Out to I/O location 12: LED=LED>>1; +00000042: 9586 LSR R24 Logical shift right +00000043: 2F08 MOV R16,R24 Copy register 13: if (LED==0) +00000044: F409 BRNE PC+0x02 Branch if not equal 14: LED=0x80; +00000045: E800 LDI R16,0x80 Load immediate 15: } +00000046: 918F POP R24 Pop register from stack +00000047: 900F POP R0 Pop register from stack +00000048: BE0F OUT 0x3F,R0 Out to I/O location +00000049: 900F POP R0 Pop register from stack +0000004A: 901F POP R1 Pop register from stack +0000004B: 9518 RETI Interrupt return @0000004C: main 18: { +0000004C: EF8F SER R24 Set Register +0000004D: B984 OUT 0x04,R24 Out to I/O location 20: TCNT1=0; +0000004E: 92100085 STS 0x0085,R1 Store direct to data space +00000050: 92100084 STS 0x0084,R1 Store direct to data space 21: OCR1A=0x3D09; +00000052: E089 LDI R24,0x09 Load immediate +00000053: E39D LDI R25,0x3D Load immediate +00000054: 93900089 STS 0x0089,R25 Store direct to data space +00000056: 93800088 STS 0x0088,R24 Store direct to data space 22: TIMSK1=1<<OCIE1A; +00000058: E082 LDI R24,0x02 Load immediate +00000059: 9380006F STS 0x006F,R24 Store direct to data space 24: TCCR1B=(1<<CS11) | (1<<CS10); +0000005B: E083 LDI R24,0x03 Load immediate +0000005C: 93800081 STS 0x0081,R24 Store direct to data space 25: sei(); +0000005E: 9478 SEI Global Interrupt Enable +0000005F: CFFF RJMP PC-0x0000 Relative jump +00000060: 94F8 CLI Global Interrupt Disable +00000061: CFFF RJMP PC-0x0000 Relative jump
4.8% памяти ATmega48. Как видно, ассемблер существенно эффективнее высокоуровневых языков. Поэтому его целесообразно использовать для небольших проектов, где выигрыш в объеме кода существенен.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Последний раз редактировалось YS Пт май 28, 2010 18:29:15, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения