Форум РадиоКот https://radiokot.ru/forum/ |
|
CodeVision + Arduino библиотеки + Atmega64 https://radiokot.ru/forum/viewtopic.php?f=57&t=87864 |
Страница 1 из 1 |
Автор: | kentik [ Пт апр 05, 2013 10:45:23 ] |
Заголовок сообщения: | CodeVision + Arduino библиотеки + Atmega64 |
Добрый день, уважаемые коты. Принимайте в свои ряды новенького. Итак. Одним ранним утром решил я что пора мне осваивать микроконтроллеры, писать к ним программы и всяческим другим образом повелевать электронами, ибо находить программиста для своих целей очень дорого, да и сама тема уж больно интересная. Решил, что проще всего начать знакомство с микроконтроллерами по средствам Arduino. выбор пал на отладочную платку 2560. вместе с ней из китая были заказаны: шилд с TFT 3,2", всякие пустышки, УЗ датчики + по мелочи кучу всего на сдачу. Посылочка моя медленно и верно полетела из китая ко мне. лететь будет долго и чувства одиночества без отладочной платы не давало мне уснуть, а посему мною были отрыты из сусеков отладочная платка (которую давно давно делал) с камушком Atmega64. ![]() плата представляет из себя - просто atmega64 с выведенными концами по краю, что бы удобно было к ним проводки подводить. все. больше ничего нет. вру. есть. мелочовка - площадки для кварца + два места под кондеры к нему и площадки для резистора и кондера к ножке ресет. на данный момент ничего не припаял. Далее в наличии на хоз учете имеем пустышку плату. ![]() или как она правильно называется? ООО. забыл упомянуть многострадальный программатор AS3M. почему многострадальный? уж больно много лишних (и самое главное - глупых) действий мне пришлось с ним провернуть, что бы заставить сие работать. Приступаем к программной части: Камушек на плате видится, читается, программульки простецкие туда записываются. Светодиодиками помигать получилось, кнопочками поиграться тоже, семисегментный индикатор тоже поддался без проблем. а вот ШИМ дался уже с трудностями. Потихоньку "разжигать" светодиод получилось, а вот понимания 50% кода нет. т.е. необходимо мне еще сидеть и сидеть над освоением С++, даташитов контроллера, принципиального понимания физических законов и прочее прочее прочее. ну я какбЭ и не против. Знание - сила. Уж больно хочется мне упросить себе жизнь, не изобретать с самого начала светодиод (велосипед). И тут на помощь приходит Arduino IDE. тем более что и плата у меня Arduino. Скачал сие ПО, посмотрел. ну все совсем просто. AVR (сейчас уже Atmel) Studio намного приятнее. И вот поставленна новая задача мною передо мною же. Необходимо в программной среде Atmel Studio 6 сделать надстройку, что бы можно было писать и на языке Wiring (Arduino IDE) и просто C++. Одновременно. Вместе. Рука об руку. Что бы, как гласит исконно мужская пословица - одно другому не мешало. и тут на помощь пришла замечательная статья из трех частей: http://www.jayconsystems.com/tutorial/atmerpt1/ Вуаля. вся та супер "надстройка wiring-а" распознается и понимается компилятором AVR Studio. берем простой скетч Arduino IDE - мигание светодиодом. компилим в AVR Studio. ошибок ноль. все хорошо. hex создался. правда тут объем его 4 КБ. вместо 300 байт - если писать по обычному. но это не беда. отладим все потом. благо у нас камушки мощные и большие. позволяют такие размеры в себя засунуть. и гораздо больше. Зачем все это спросите вы? зачем так изгаляться? "мисье знает толк в извращениях" - возможно кто-то захочет написать. НО!!! подождите и, немного набравшись терпения, прочтите до конца. осталось немного. Смысл всего этого (совмещение wiring и С++) заключается в том, что при данной конструкции среды разработки я могу брать библиотеки для Arduino (например к тому же TFT 3.2" который заказал), вставлять их в свой проект, тупо так копипастить код из скетча-примера и уже дословно разбираться в нем в своей программе. а если не могу что-то понять, то это не будет мешать программе правильно работать. ведь не на каждый вопрос можно найти сразу же ответ. Ну вот и переходим к заключительной части: вопросу аудитории. в каком файле Arduino находится описание каждой ноги к контроллеру? ведь в платах Arduino нет Atmega64. а у меня есть только она сейчас. правильно ли я понимаю, что тут: pins_arduino.h но как мне расписать этот файл? Подскажите плииз. Буду рад развить эту тему, возможно она будет полезна многим новичкам. |
Автор: | oleg110592 [ Пт апр 05, 2013 12:35:17 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
тут прикручивали тини85 к ардуино: http://www.instructables.com/id/Self-co ... no-Attiny/ может поможет - по образу и подобию |
Автор: | kentik [ Пт апр 05, 2013 16:37:54 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
вообще не догоняю как и что там. |
Автор: | oleg110592 [ Пт апр 05, 2013 18:07:01 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
Код: 6. Install ATtiny45 / ATtiny85 support in **Arduino v0023** - Download: attiny45_85.zip http://hlt.media.mit.edu/wp-content/uploads/2011/06/attiny45_85.zip - Locate your Arduino sketchbook folder (you can find its location in the preferences dialog in the Arduino software) - Create a new sub-folder called “hardware” in the sketchbook folder. - Copy the attiny45_85 folder from the attiny45_85.zip to the hardware folder. - Restart the Arduino development environment. бегло глянул - надо по подобию отредактировать: boards.txt pins_arduino.c Makefile для меги64 |
Автор: | kentik [ Пн апр 08, 2013 07:48:31 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
Оставил пока портирование меги64 на ардуино и переключился на другую задачу: подключение к экранчику 12864 (FDCG12864B-FLYYBW-51XN). Делал все как тут: http://www.radiokot.ru/lab/controller/15/ В Proteus все симулируется отлично. На моем камне нифига. пробовал и с внутренним 8 МГц и с внутренним 1 Мгц. один фиг не выводит. Контрастность регулируется потенциометром. залитую матрицу видно, но не понятно - прошла инициализация экрана или нет. ну и соответственно ничего не выводится на экран. хотя опять-таки в proteus все работает отлично. как так? |
Автор: | oleg110592 [ Пн апр 08, 2013 09:28:13 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
Задержки, может надо больше, еще там бывает, не помню уже, разобраться с "правильностью" CS1 CS2 |
Автор: | kentik [ Пн апр 08, 2013 10:18:41 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
oleg110592 писал(а): Задержки, может надо больше, еще там бывает, не помню уже, разобраться с "правильностью" CS1 CS2 ага. вот вся беда в этих задержках. не понимаю как их подбирать. пробовал методом "кота тыка" - не получается. менял частоту, благо в атмеге 64 без кварца можно поставит 1 или 2 или 4 или 8 МГц - результат аналогичный. а правильность cs1 / cs2 видна на экране сразу - либо перепутаны половинки либо нет, но мне еще и не дойти до этого момента. подключил так: ![]() реально все вот так: ![]() в proteus пашет, в железе - мяу на ны. |
Автор: | kentik [ Пн апр 08, 2013 10:32:32 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
Пишу в Atmel Studio 6 сама прога: Код: #include <avr/io.h> #include <stdlib.h> #include <macros.h> #include <avr/delay.h> #define NOP() asm volatile("nop") #define SetBit(x,y) (x|=y) #define ClrBit(x,y) (x&=~y) #define TestBit(x,y) (x&y) #define LCD_RST 0b00000001 #define LCD_CS1 0b00000010 #define LCD_CS2 0b00000100 #define LCD_E 0b00001000 #define LCD_RW 0b00010000 #define LCD_RS 0b00100000 #define LCD_DB PORTB //Порт управления данных на моей плате #define LCD_COM PORTD //порт управляющих выводов на моей плате #include <ks0108.h> int main(void) { DDRB=0xff; DDRD=0xff; init_lcd(); _delay_ms(5); clear(); _delay_ms(5); WriteXY(6,2,LCD_CS1); WriteData(0b00000000,LCD_CS1); while(1) { } } файл ks0108.h СпойлерКод: #include <symvol.h> #include <stdlib.h> #include <string.h> unsigned char textx, texty, curx, cury, ch[6]; void WriteCom(unsigned char Com,unsigned char CS) { SetBit(LCD_COM,CS); ClrBit(LCD_COM,LCD_RS); ClrBit(LCD_COM,LCD_RW); NOP(); NOP(); LCD_DB=Com; SetBit(LCD_COM,LCD_E); NOP(); NOP(); ClrBit(LCD_COM,LCD_E); _delay_us(4); ClrBit(LCD_COM,(LCD_CS1+LCD_CS2)); SetBit(LCD_COM,LCD_E); } void WriteData(unsigned char data,unsigned char CS) { SetBit(LCD_COM,CS); SetBit(LCD_COM,LCD_RS); ClrBit(LCD_COM,LCD_RW); NOP(); NOP(); LCD_DB=data; SetBit(LCD_COM,LCD_E); NOP(); NOP(); ClrBit(LCD_COM,LCD_E); _delay_us(4); ClrBit(LCD_COM,(LCD_CS1+LCD_CS2)); SetBit(LCD_COM,LCD_E); } void WriteXY(unsigned char x,unsigned char y,const unsigned char CS) { WriteCom(0xb8+y,CS); WriteCom(0x40+x,CS); } void init_lcd(void) { SetBit(LCD_COM,LCD_RST); _delay_ms(5); WriteXY(0,0,(LCD_CS1+LCD_CS2)); WriteCom(0xc0,(LCD_CS1+LCD_CS2)); WriteCom(0x3f,(LCD_CS1+LCD_CS2)); } void clear(void) { unsigned char x,y; for(x=0;x<64;x++) { for(y=0;y<8;y++) { WriteXY(x,y,(LCD_CS1+LCD_CS2)); WriteData(0,(LCD_CS1+LCD_CS2)); } } } |
Автор: | kentik [ Вт апр 16, 2013 15:23:10 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
итак. заполняем дальше свой кото-блог ![]() писать все-таки продолжил в CodeVision. Atmel Studio оставляем до поры, ибо очень много что там не понятного. особенно не нравится, что размер программульки получается в 3-и раза больше, нежели аналогичная программа компилируется в CodeVision. уже по-моему все настройки крутил. Экранчик поддался сразу. что очень порадовало: ![]() далее настал через датчика температуры DS18B20 в принципе навалом всяких примеров и по 1wire датчик стал показывать температуру. ![]() чем дальше в лес, тем больше дров. Может кто подскажет мне ответ: как мне использовать несколько датчиков? но я должен четко знать где какой стоит, а не опрашивать их по ROM номеру. т.е. у меня 4-и датчика температуры. все показания разные. все датчики втыкаются и вытыкаются когда хотят. так как мне четко необходимо знать, что тут воткнули (ну к примеру верхний левый датчик), то предполагаю, что надо привязываться к пинам мк. весь код для одного датчика такой: Код: #asm .equ __w1_port=0x18 ;PORTB .equ __w1_bit=3 #endasm #include <ds18b20.h> temper = ds18b20_temperature(0); delay_ms(50); sprintf( lcdBuff," %.1f\xB0C", temper ); вывод на экран значение lcdBuff; а как сделать тоже самое, но для 2-х? 3-х? датчиков, присоединенных к другим ногам? правильно ли я понимаю, что первое - это будет так: Код: #asm .equ __w1_port=0x18 ;PORTB .equ __w1_bit=3 .equ __w2_port=0x18 ;PORTB .equ __w2_bit=2 .equ __w3_port=0x18 ;PORTB .equ __w3_bit=1 .equ __w4_port=0x18 ;PORTB .equ __w4_bit=0 #endasm а вот дальше мне не допереть. |
Автор: | ibiza11 [ Вт апр 16, 2013 15:47:03 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
kentik писал(а): заполняем дальше свой кото-блог Вы ошиблись, это не кото-блог. Ваше сообщение никак не относится к AVRStudio и Arduino библиотекам. Может стоит писать вопросы там, где это в тему?Всё по DS18(B/S)20. CodeVision AVR в вопросах и ответах ![]() |
Автор: | kentik [ Вт апр 16, 2013 19:32:47 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
ibiza11 писал(а): Вы ошиблись, это не кото-блог. Ваше сообщение никак не относится к AVRStudio и Arduino библиотекам. Может стоит писать вопросы там, где это в тему? ![]() может не стоит злиться? название темы мне уже не поменять. а так изменил бы на CodeVision + Arduino библиотеки + Atmega64 |
Автор: | uk8amk [ Вт апр 16, 2013 19:35:56 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
kentik писал(а): .equ __w2_port=0x18 ; PORTB.equ __w2_bit=2 Нет, неправильно. w1 - видимо расшифровывается как 1Wire. Для того , чтобы подключить по одному проводу на датчик, надо перелопатить ту библиотеку под себя. Точнее потрошить дизассемблер этих функций: Код: unsigned char w1_init(void); unsigned char w1_read(void); unsigned char w1_write(unsigned char data); unsigned char w1_search(unsigned char cmd,void *p); unsigned char w1_dow_crc8(void *p,unsigned char n); Но проще самому написать под себя, ИМХО. Или в сети готовые примеры найти и сделать по их образу и подобию. |
Автор: | kentik [ Вт апр 16, 2013 20:15:47 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
uk8amk писал(а): Но проще самому написать под себя, ИМХО. Или в сети готовые примеры найти и сделать по их образу и подобию. неее написать библиотеку пока рановато для меня. это чуть позже ![]() спасибо за идею. почапал рыскать в инете другие примеры. |
Автор: | ChipKiller [ Вт апр 16, 2013 20:53:14 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
kentik писал(а): неее написать библиотеку пока рановато для меня. ... для работы с DS18b20 достаточно написать 3 функции - w1_init(), w1_read(), w1_write(). Пример w1_init() Код: uchar DS18b20_init(void){
uchar cnt; DDRD.Ds18b20=1; // линию в "0" delay_us(480); #asm("cli") DDRD.Ds18b20=0; // отпустим линию delay_us(5); cnt=20; while(cnt--){ // ждем ответа 50 мкс if(PIND.Ds18b20==1){ delay_us(1);} else { #asm("sei") delay_us(480); goto end_init; } } #asm("sei") end_init: return cnt; } |
Автор: | kentik [ Вт апр 16, 2013 21:21:55 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
ChipKiller писал(а): для работы с DS18b20 достаточно написать 3 функции - w1_init(), w1_read(), w1_write(). Пример w1_init() Спасибо. Обьясните пожалуйста вот эту строчку: DDRD.Ds18b20=1; у меня компилятор ругается. p.s. Uchar - это unsigned char? |
Автор: | ChipKiller [ Вт апр 16, 2013 21:29:38 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
Цитата: Обьясните пожалуйста вот эту строчку: DDRD.Ds18b20=1; неужели сложно догадаться и написать у меня компилятор ругается. Код: #define Ds18b20 6 Ds18b20 - номер вывода порта ...
#define uchar unsigned char #define uint unsigned int |
Автор: | kentik [ Вт апр 16, 2013 21:39:00 ] |
Заголовок сообщения: | Re: AVR Studio + Arduino библиотеки + Atmega64 |
ChipKiller писал(а): неужели сложно догадаться и написать Ds18b20 - номер вывода порта ... Вы не поверите, но не просто. "Я не волшебник, я только учусь"© не сочтите за наглость, но я был бы премного благодарен за описание остальных 2х функций |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |