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

SergeyDon

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

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array
  1. Закрываю тему! все получилось :) Вот код с коментариями (не оптимизирован, для наглядности и последовательности действий): .include "m16def.inc" ; Используем ATMega16 .CSEG .ORG 0x0000 ; проц стартует JMP Reset ; переход на начало программы //таблица векторов прерываний .ORG INT0addr ; External Interrupt Request 0 RETI .ORG INT1addr ; External Interrupt Request 1 RETI .ORG OC2addr ; Timer/Counter2 Compare Match RETI .ORG OVF2addr ; Timer/Counter2 Overflow RETI .ORG ICP1addr ; Timer/Counter1 Capture Event RETI .ORG OC1Aaddr ; Timer/Counter1 Compare Match A RETI .ORG OC1Baddr ; Timer/Counter1 Compare Match B RETI .ORG OVF1addr ; Timer/Counter1 Overflow RETI .ORG OVF0addr ; Timer/Counter0 Overflow RETI .ORG SPIaddr ; Serial Transfer Complete RETI .ORG URXCaddr ; USART, Rx Complete RETI .ORG UDREaddr ; USART Data Register Empty RETI .ORG UTXCaddr ; USART, Tx Complete RETI .ORG ADCCaddr ; ADC Conversion Complete RETI .ORG ERDYaddr ; EEPROM Ready RETI .ORG ACIaddr ; Analog Comparator RETI .ORG TWIaddr ; 2-wire Serial Interface RETI .ORG SPMRaddr ; Store Program Memory Ready RETI // DATA_PORT шина данных // CMD_PORT[0..2] линии управления //(0-E (строб); 1-R/W (0-запись,1-чтение); 2-RS (0-команда, 1-данные)) .equ CMD_PORT = PORTA .equ CMD_PORT_DDR = DDRA .equ E = 1 .equ RW = 2 .equ RS = 3 .equ DATA_PORT = PORTB .equ DATA_PORT_DDR = DDRB .equ DATA_PORT_PIN = PINB .ORG INT_VECTORS_SIZE ; конец таблицы прерываний Reset: LDI R16,low(RAMEND) ; сразу инициализируем стек OUT SPL,R16 ; без него не будет работать LDI R16,High(RAMEND) ; вызов процедур, прерывания, OUT SPH,R16 ; команды push / pop CALL DPORT_In ; порт шины данных на вход SBI CMD_PORT_DDR, E ; ноги управляющих сигналов SBI CMD_PORT_DDR, RW ; настроили SBI CMD_PORT_DDR, RS ; на выход CBI CMD_PORT,E ; убрали CBI CMD_PORT,RW ; управляющие CBI CMD_PORT,RS ; сигналы // выполним паузу перед стартом для раздупления ЖКИ CALL wait_05 ; пауза 0.5сек // начинаем инициализацию дисплея ЖКИ 16*2, (реж.8бит) // раз команда 8бит 2 строки CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x38 ; 8бит 2 строки OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob ; стробирующий импульс CALL wait_4mkc ; пауза 4мкс (рекомендует даташит) // два команда 8бит 2 строки CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x38 ; 8бит 2 строки OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob ; стробирующий импульс // режим указали, готовим дисплей к выводу информации // команда очистка экрана CALL LCD_busy ; проверка готовности ЖКИ // в реале нужно предусмотреть выход из проверки // если дисплей не инициализировался по какой либа причине CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x01 ; очистка экрана (код 01h) OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob ; стробирующий импульс // команда вкл. экран CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x0C ; вкл. экран (код 0Ch) OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob ; стробирующий импульс // команда задаем режим смещение курсора CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x06 ; вкл. экран (код 06) OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob // команды $80 (можно глянуть в даташит) CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход CBI CMD_PORT,RS ; будет команда RS=0 CBI CMD_PORT,RW ; будем писать данные R/W=0 LDI R16,0x80 ; OUT DATA_PORT,R16 ; выставили данные в порт NOP CALL strob ; стробирующий импульс // инициализация закончена можно слать данные // посылаем букву CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход SBI CMD_PORT,RS ; будут данные RS=1 CBI CMD_PORT,RW ; будем писать данные R/W =0 LDI R16,'A' ; код буквы A OUT DATA_PORT,R16 ; выставили в порт NOP CALL strob // посылаем букву CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход SBI CMD_PORT,RS ; будут данные RS=1 CBI CMD_PORT,RW ; будем писать данные R/W =0 LDI R16,'a' ; код буквы a OUT DATA_PORT,R16 ; выставили в порт NOP CALL strob // посылаем код буквы CALL LCD_busy ; проверка готовности ЖКИ CALL DPORT_Out ; порт шины данных на выход SBI CMD_PORT,RS ; будут данные RS=1 CBI CMD_PORT,RW ; будем писать данные R/W =0 LDI R16,0x41 ; код буквы A OUT DATA_PORT,R16 ; выставили в порт NOP CALL strob // собственно символы на экране... // порт в исходное состояние CALL DPORT_In ; порт шины данных на вход loop: NOP CALL LED_blink ; мигаем светодиодом бит5 portD NOP RJMP loop ; перпетуммобиль //////////////////////////////////////////////////////////////////////// DPORT_In: // порт шины данных на вход LDI R16,0x00 OUT DATA_PORT_DDR, R16 ; порт шины данных на вход LDI R16,0xFF OUT DATA_PORT, R16 ; режим Pull-up RET DPORT_Out: // порт шины данных на выход LDI R16,0x00 ; OUT DATA_PORT,R16 ; разгрузили ноги LDI R16,0xFF ; OUT DATA_PORT_DDR,R16 ; порт на выход RET strob: // стробирующий импульс SBI CMD_PORT,E ; стробирующий импульс вкл. CALL delay ; пауза CBI CMD_PORT,E ; стробирующий импульс выкл. CALL delay ; пауза RET LCD_busy: // проверка готовности ЖКИ (тут можно застрять! если например ЖКИ отсутствует) CALL DPORT_In ; порт шины данных на выход busy: CBI CMD_PORT,RS ; будет команда RS=0 SBI CMD_PORT,RW ; будем читать данные R/W=1 SBI CMD_PORT,E ; стробирующий импульс вкл. CALL delay ; короткая пауза IN R16,DATA_PORT_PIN ; читаем данные CBI CMD_PORT,0 ; стробирующий импульс выкл. ANDI R16,0x80 ; Продавливаем по маске. Есть флаг? BRNE Busy ; Если нет, то ждем дальше (опасность тут!) RET delay: // фронт строба ~500нсек. LDI R17,0x04 d0: DEC R17 BRNE d0 RET wait_05: // задержка 0,5сек. (Расчитанно программой AVRdelayloop3.exe) ; ============================= ; delay loop generator ; 4000000 cycles: ; ----------------------------- ; delaying 3999996 cycles: ldi R17, $24 WGLOOP0: ldi R18, $BC WGLOOP1: ldi R19, $C4 WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17 brne WGLOOP0 ; ----------------------------- ; delaying 3 cycles: ldi R17, $01 WGLOOP3: dec R17 brne WGLOOP3 ; ----------------------------- ; delaying 1 cycle: nop ; ============================= RET wait_4mkc: ; ============================= ; delay loop generator ; 32 cycles: ; ----------------------------- ; delaying 30 cycles: ldi R17, $0A WGLOOP4: dec R17 brne WGLOOP4 ; ----------------------------- ; delaying 2 cycles: nop nop ; ============================= RET LED_blink: SBI PORTD,5 ; вкл. светодиод на PORTD.5 (для PINBoard) CALL wait_05 CBI PORTD,5 ; выкл. светодиод на PORTD.5 (для PINBoard) CALL wait_05 RET
  2. Спасибо, за проверку. Попробовал подключить дисплей по Вашему примеру ничего не сработало... пробую поискать может где с контактами плохо...
  3. я видел такие примеры (когда читают при активном стробе (Е) с небольшой задержкой), и пробовал так читать/писать тоже, результата пока нет... видно где-то туплю... думаю сделать перерыв а потом опять глянуть, а то уже атоматически смотрю и невижу ошибку. (файл который Вы дали, я скачал раньше на сайте радиокот! ссылку если нужно будет найду) В даташите (да и на некоторых сайтах) вроде написано что читать/писать после спада стробирующего сигнала? Спасибо, что смотрите код, а не просто даёте советы как сделать... ЖКИ рабочий 100%, у меня есть пример с программой на RTOS в которой инициализируется и работает дисплей.
  4. сам уже много раз по коду смотрел, вроде ничего невидно! ладно буду насиловать HapSim дальше. Он HapSim и очистку дисплея отрабатывает? а то у меня буква появляется, не вначале экрана конечно но появляется.
  5. _Pasha Забыл подробней расписать: 1. От внутреннего генератора, 8МГц 2. Поиском нарыл много разного, по тем примерам и сделал (в основном конечно даташит курил), на этом форуме трудно искать слова "LCD" "ЖКИ" не хавает! тупо пишет ничего не найдено, уже было собрался уходить когда вспомнил, что бывают админы которые блокируют поиск слов из трёх букв и НАГЛО об этом умалчивают. вот подробно расписанно: http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm 3. У меня на этой примочке "HapSim@ буква "А" появляется на экране! а вот очистка экрана не срабатывает... 4. к сожалению только начал ковырять МК и в "сях" ещё не разобрался, асм вроде по проще пока. (ссылка на AVRLIB дохлая)
  6. Прошу ведающих посмотреть код: исходник на асме (AVRstudio) 5,5кБ Пробую разобраться с работой ЖКИ, никак не могу его запустить :( подключяю так: port_B на МК (шина данных 8бит), port_D (биты 0..2) на МК это управляющие линии. на portD.5 висит светодиод - мигает когда инициализация прошла, программа до мигания доходит но на экране только верхняя полоска светиться. уже неделю парюсь и никак не запускается...
  7. где-бы (компэл или www.wavecom.com ) не качал OpenAT, инсталяция всегда выдает что файл install.exe инфецирован Trojan.DownLoader.59136
  8. по поводу не устойчивой работы встроенного стека в модем WaveCom голословные утверждения!!! Лично проверенно, в течении суток был всего один сбой (причина пока не установленна) цена 10000$ и более за 200строчек кода ДОРОГОВАТО! Оффициально "Французы" готовы решить мою задачу за цену на порядки меньше! (сроки большие, да и документально оформить тяжело перевод денег за границу) to etoja: похоже, что это вы путаетесь в понятиях организации канала связи... разве не вы предлагали использовать "команды ATD*99***1" ? для информации http://www.arcelect.com/RS232_to_TCP-IP_converter.htm - цена этого чуда 89$
  9. to volod_ua: "Який контролер використовується?" - це не контролер, а електронний лічильник електричної енергії. "І час за який потрібно виконати роботу?" - Як що впоратися за 2 місяці, було б чудово. to dezzer: "Ищете разработчика на месте или подойдёт удалённый вариант?" - подходит и удаленній вариант. to etoja: "Стоимость работы 12.000 долларов США." - Ваша цена в не конкуренции :) "с помощью команды ATD*99***1" - кто будет давать эту комманду? Я писал "связь модемы устанавливают автоматически"! Время прихода sms может быть и 30мин.! to zltigo: про "лохов" ві точно написали! Даже статические IP-адреса не все операторы готовы предоставить! Мы им пол года доказывали, что такое вообще возможно не говоря уже об использовании!
  10. необходимо разработать ПО (модем Wavecom FastrackSuprime) для выполнения следующей задачи: постановка задачи: Организовать пакетную передачу данных между устройствами имеющими интерфейсный выход RS232, используя GPRS соединение между модемами Wavecom FastrackSuprime (Sim карты оператора активированны на услугу GPRS передачи данных и имеют внешние статические IP-адреса). При подачи питания модемы автоматически должны устанавливать и контралировать соединение для обмена данными между собой. Структурная схема: (устройство-RS232 <-пакет данных-> RS232-модем -> <-GPRS канал-> <-модем-RS232 <-пакет данных-> RS232-устройство) схема работы: 1. устройство1 посылает пакет данных в RS232 порт модема1 с фиксированной скоростью (19200 бод) 2. модем1 передаёт используя GPRS канал этот пакет на модем2 3. получив пакет данных по каналу GPRS модем2 пересылает его в RS232 порт устройства2 4. устройство2 посылает ответный пакет с фиксированной скоростью (19200 бод) в RS232 порт модема2 5. модем2 передаёт используя GPRS канал этот пакет на модем1 6. получив пакет данных по каналу GPRS модем1 пересылает его в RS232 порт устройства1 контактная информация: Украина, г.Донецк E-mail: [email protected] моб. 8-068-661-13-90 Сергей Анатольевич.
  11. Можно использовать VisalStudio.net для написания OpenAT приложений? что для этого нужно? p.s. из простой задачи вырасла такая куча проблем :( to million68: спасибо за помощь. на AT командах все работает!
  12. to million68: спасибо за ваше терпение! AT+WIPCREATE=3,1,80,5,8 OK +WIPACCEPT: 1,5 // эта строчка в терминале не появляется! Хотя в примерах из *.pdf она фегурирует. AT+WIPDATA=2,5,1 +CME ERROR: 831 //bad state оператор говорит, что login and password оставлять пустыми поэтому набераю так: AT+WIPBR=2,6,0,""
  13. "то юзайте OpenAT" Я так и предпологал, для начала просто хотел проверить возможность такого соединения! Разве OpenAT не базируется на AT-командах? что можно почитать по теме OpenAT?
  14. похоже я в танке (извеняюсь, но раньше никогда с этим не работал) Еще раз о задаче: 1. Есть ПК и программа которая посылает в компорт данные (например пакет из 4 байт 0хА1 0х11 0хС3 0хВ2) и ждет ответа на свою посылку. 2. Есть контроллер с интерфейсом RS232 который ожидает в порту паке данных (например такой 0хА1 0х11 0хС3 0хВ2), при получении пакета дает в ответ пакет до 150 байт. 3. Имеются 2 модема Wavecom FastrackSuprime 10 + Sim карты с активированной услугой GPRS и выделенными внешними статическими IP адресами. Задача: Установить соединение между модемами, что-бы при появлении данных в порту RS232 они их передовали друг другу (своего рода мост). Для реализации такого соединение мне нужен TCP/IP стек? или это можно сделать проще? В службе тех.поддержки мне начали росказывать про соединение через сокеты (пока перевариваю как это). И переписать програмное обеспечение (как будто это сел и переписал). Ни программа, ни контроллер не знают о каких либо протоколах TCP/IP или им подобных. Это готовое законченное решение, которое покупается. -=- AT+WIPCFG=1 AT+WIPBR=1,6 AT+WIPBR=2,6,11,”internet” //почему ”internet”? AT+WIPBR=2,6,0,”” //login не нужен AT+WIPBR=2,6,1,”” //pass не нужен AT+WIPBR=4,6,0 AT+WIPCREATE=2,1, "IP адрес",80 //IP-указывать который мне сообщил провайдер? error 842 AT+WIPDATA=2,1,1 //до этого места не дохожу :(
  15. to million68: набираю через гипертерминал: at OK AT+WOPEN=1 OK at+cgdcont=1,"IP","vpni.kyivstar.net" OK at+cgatt=1 OK at+cgact=1,1 OK //это как я понимаю и есть установленное соединение? at+wipcfg=3 WIP Soft v301 on Open AT OS v421 Oct 3 2007 13:46:45 WIPlib:v3a02 WIPSoft:v2a07 OK at+wipcfg=1 ERROR
×
×
  • Создать...