Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
PIC контроллеры. Программаторы и первый проект на PIC |
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио |
|
Опции темы |
11.11.2010, 20:54 | #631 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
Кстати.... У меня теги тоже чего то не вставляются-может глюк сервера может еще что.. и никаких быстрых кнопок у меня на странице не появляется.. Так что прошу отнестись к этому с пониманием.. Так как уходить пока никуда не собираюсь...
И при чем тут культура общения?- если написанный текст или код не содержит никаких оскорбительных или прочих моментов- так какая разница в тегах он или нет? |
12.11.2010, 10:47 | #632 | |
Форумец
|
Цитата:
На БВФ не все теги правильно настроены, но [CODE] работает. Во всяком случае можно и руками их писать. Ну если так подходить, то вообще можно без оскорблений весть текст и код написать в одну строку, а потом обижаться, что никто не подсказывает. Нафига кому-то тратить время на колупание в сплошном тексте и выковыривание лишнего, чтобы только добраться до смысла написанного? Так что разница есть. |
|
13.11.2010, 22:33 | #633 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
... ну в принципе согласен.... аргументы у Вас коллега железные...
Вот сейчас и проверим... в смысле напишется теги как надо или нет...))) Вот вопросик возник... Я еще не совсем силен в СИ - вот как например написать на СИ подобный фрагмент на ассемблере- программа в зависимости от изменения уровня на входе контроллера переключает другой вывод на режим входа или выхода- выставляет в 1 вывод при работе как выход(например заряд емкости) или читает его состояние при работе как вход...В принципе алгоритм не имеет почти никакого практического значения но может быть использован как фрагмент программы например примитивного АЦП без претензий на большую точность или для построения простейших девайсов где необходим аналоговый ввод... Код:
list p=12f629 #include <p12f629.inc> errorlevel -302 __CONFIG _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF& _PWRTE_ON & _INTRC_OSC_NOCLKOUT ;***** VARIABLE DEFINITIONS cblock 0x20 Toggler endc ;********************************************************************** ORG 0x000 ; processor reset vector goto main ; go to beginning of program ;*********************************************************************** main ;начальная инициализация movf GPIO,f movlw 0x07 movwf CMCON bsf STATUS,RP0 movlw b'00101011' movwf TRISIO movlw b'10000101' movwf OPTION_REG bcf STATUS,RP0 movlw 0x20 movwf Toggler ;----------------------------------------------------------- Loop movf GPIO,w andlw 0x20 xorwf Toggler,w btfss STATUS,Z goto Loop clrf TMR0 movlw 0x20 xorwf Toggler,f btfss Toggler,5 goto Loop1 btfsc Toggler,5 goto Loop2 goto Loop ;------------------------------------------------- Loop1 nop bsf STATUS,RP0 movlw b'00101001' movwf TRISIO bcf STATUS,RP0 bsf GPIO,1 goto Loop ;------------------------------------------------------------ Loop2 nop movf GPIO,f bcf GPIO,1 bsf STATUS,RP0 movlw b'00101011' movwf TRISIO bcf STATUS,RP0 goto Loop ;------------------------------------------------------------ END ; directive 'end of program' Последний раз редактировалось Butik; 13.11.2010 в 23:18. |
13.11.2010, 22:55 | #635 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
В железе правда не проверял- в протеусе погонял слегка- вроде работает...
При старте устанавливается автоматом минимальный уровень... но я думаю не проблема сделать по любому... А на счет тегов- у меня не всегда включается расширенный режим при написании сообщения- видимо глюк сервера или сайта |
15.11.2010, 20:47 | #636 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
с этих компиляторов с ума сойти можно.... капец какой то...
l Код:
ist p=12f629 #include <p12f629.inc> errorlevel -302 __CONFIG _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF& _PWRTE_ON & _INTRC_OSC_NOCLKOUT ;***** VARIABLE DEFINITIONS cblock 0x20 Toggler endc ;********************************************************************** ORG 0x000 ; processor reset vector goto main ; go to beginning of program ;*********************************************************************** main ;начальная инициализация movf GPIO,f movlw 0x07 movwf CMCON bsf STATUS,RP0 movlw b'00101011' movwf TRISIO movlw b'10000101' movwf OPTION_REG bcf STATUS,RP0 movlw 0x20 movwf Toggler ;----------------------------------------------------------- Loop movf GPIO,w andlw 0x20 xorwf Toggler,w btfss STATUS,Z goto Loop clrf TMR0 movlw 0x20 xorwf Toggler,f btfss Toggler,5 goto Loop1 btfsc Toggler,5 goto Loop2 goto Loop ;------------------------------------------------- Loop1 nop bsf STATUS,RP0 movlw b'00101001' movwf TRISIO bcf STATUS,RP0 bsf GPIO,1 goto Loop ;------------------------------------------------------------ Loop2 nop movf GPIO,f bcf GPIO,1 bsf STATUS,RP0 movlw b'00101011' movwf TRISIO bcf STATUS,RP0 goto Loop ;------------------------------------------------------------ END ; directive 'end of program' Код:
#include "C:\Microchip\_Project_\1c\main.h" #use fast_io(A) void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_comparator(NC_NC); setup_vref(FALSE); set_tris_A(0x28); do{ if(input(PIN_A5)== 1) set_tris_A(0x28), output_bit(PIN_A1,1); if(input(PIN_A5)== 0) set_tris_A(0x2A); }while(1); } А вот так в MikroC не работает!!!! Код:
unsigned short old_GPIO ; void init() { CMCON = 0x07; // все выводы контроллера-цифровые TRISIO = 0b00101000;/* настройка GPIO.2- GPIO.3 на ввод, остальные- на вывод*/ WPU = 0x00; //Подтягивающие резисторы выключены INTCON.INTE = 1; // внешнее прерывание разрешено INTCON.T0IE = 0; // прерывание от TMR0 запрещено OPTION_REG = 0b11000101;/* подтягивающие резисторы выключены, коэффициент деления предделителя таймера 1:64*/ INTCON.GIE = 0; // глобальное разрешение прерываний } // ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ void main() { init() ; // Начальная инициализация do { old_GPIO = GPIO; if(old_GPIO.F5 = 1) TRISIO = 0x28, old_GPIO.F1=1, GPIO = old_GPIO; if (old_GPIO = 0) TRISIO = 0x2A; } while(1); } или это глюк компилятора????? |
15.11.2010, 21:29 | #637 |
Форумец
|
Конечно не одно и тоже, в Си при сравнении на равенство надо писать "==" .
А почему операторы через запятую? Каждый оператор должен точкой с запятой оканчиваться. Код:
if(input(PIN_A5)== 1) set_tris_A(0x28), output_bit(PIN_A1,1); ....... if(old_GPIO.F5 = 1) TRISIO = 0x28, old_GPIO.F1=1, GPIO = old_GPIO; ....... |
15.11.2010, 22:10 | #638 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
исправил = на == -картина та же....Хотя и при = компилятор не ругался... А вот когда ставишь вместо запятой точку с запятой- ругается!!!!!!!!!!!!!!
И потом... если в CCS можно писать через запятую(и все работает!!!!)... то почему в MikroC нельзя???? У меня стоит MikroC 8200 |
16.11.2010, 07:22 | #640 |
Форумец
Сообщений: 82
Регистрация: 13.09.2010
Не в сети |
Доброе утро.
1.Ребят подскажите можно ли в Протеусе добавить инфракрасник и эмулировать нажатия клавиш с пульта.Если да то как.Заранее спасибо. 2.Как только не пробывал, никак не получается вывести на дисплей русское слово.Тестировал в Протеусе(может проблема в нем). Последний раз редактировалось Азат; 16.11.2010 в 08:12. |
16.11.2010, 08:14 | #641 | |
Форумец
|
Такие записи правильные, но смысл разный:
Код:
if(tmp == 1) {...} Код:
if(tmp = 1) {...} Цитата:
Код:
void main() { init() ; do { old_GPIO = GPIO; if(old_GPIO.F5 ==1) { TRISIO = 0x28; old_GPIO.F1=1; GPIO = old_GPIO; } if (old_GPIO == 0) TRISIO = 0x2A; } while(1); } |
|
16.11.2010, 08:26 | #642 | ||
Форумец
|
Цитата:
Цитата:
Применение для MikroC: Код:
LCD_Out_Rus(1,1,"Привет"); Последний раз редактировалось petrd; 16.11.2010 в 08:44. |
||
16.11.2010, 08:56 | #643 | |
Форумец
Сообщений: 82
Регистрация: 13.09.2010
Не в сети |
Значит если я даже напишу по русски не факт что в протеусе выдет русский текст.Вот я попоробывал как вы сказали.Слово Привет.
Цитата:
|
|
16.11.2010, 09:09 | #644 |
Форумец
|
У меня на столе сейчас лежит WH1602 и с этой функцией работает без проблем. Значит в Протеусе кодовая таблица для ЖКИ отличается от WH, поэтому надо перекодировать массив russian_HD44780[] под знакогенератор модели Протеуса.
|
16.11.2010, 10:16 | #647 | |
Форумец
Сообщений: 82
Регистрация: 13.09.2010
Не в сети |
Должно написаться в первой строке Инициализация.Во второй заполнить нулем.Как заполнить знаком черным квадратом вместо нуля.И вообще правильно ли я сделал.
Цитата:
|
|
16.11.2010, 10:36 | #648 |
Форумец
|
|
16.11.2010, 11:14 | #650 |
Форумец
|
|
16.11.2010, 11:29 | #651 | |
Форумец
Сообщений: 82
Регистрация: 13.09.2010
Не в сети |
1.Почему в протеусе зависает?
2.Правильно ли я сделал нажатие кнопки? 3.Как сделать при первом нажатие надпись осталась,при втором убралась? 3.Как правильно очистить первую строку, чтоб не моргала? Цитата:
Последний раз редактировалось Азат; 16.11.2010 в 15:40. |
|
16.11.2010, 20:35 | #652 | |
Форумец
|
Цитата:
2. Правильно. 3. Можно как-то так: Код:
unsigned short oldstate, flag; ........... flag = 0; ............ for(;;){ if (Button(&PORTB, 7, 10, 1)) oldstate = 1; if (oldstate && Button(&PORTB, 7, 10, 0)) { flag = ~flag; oldstate = 0; } if (flag) LCD_Out_Rus(2,1," Надпись "); else LCD_Out_Rus(2,1," "); } Код:
LCD_Out(1,1," "); // строка в 16 пробелов |
|
16.11.2010, 21:50 | #653 | |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
Цитата:
|
|
17.11.2010, 14:53 | #655 | ||
Форумец
|
Цитата:
Азат Цитата:
Кстати, со вчерашней проблемой разобрались? |
||
17.11.2010, 15:03 | #656 |
Форумец
|
Для всех и для пишуших на ассемблере в частности. Очередной бестселлер от tester 'a под названием "Как правильно оформлять программы на ассемблере для PIC-контроллеров" http://www.microchip.su/showpost.php...04&postcount=1
|
17.11.2010, 15:09 | #657 |
Форумец
Сообщений: 82
Регистрация: 13.09.2010
Не в сети |
Да спасибо огромное пробывал по разному, с кнопками поиграл.)
1.Петр где можно нормальный русский ds скачать(или если не трудно вложите здесь). 2.Подскажите пожалуйста как реализовать bmp рисунок чтоб отобразился на дисплее.Т.е хочеться чтоб на экране было 4 рисунка подряд ввиде 4 кнопок.Навроде меню мобильного.Какой дисплей выбрать для этого. Последний раз редактировалось Азат; 18.11.2010 в 08:16. |
17.11.2010, 17:07 | #658 |
Форумец
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58
Не в сети |
За ссылку огромное спасибо!!!!!! Вроде и азбучные истины но часто попадаешь впросак- забываешь... то о том то об этом...)))
Теперь вот о доверии Протеусу и прочему всему подобному... Вот я выше писал о проблемке- два совершенно одинаковых фрагмента- но из разных компиляторов- и ведут себя по разному...Но... тот вариант из них что работает в протеусе- работает и в железе.. а тот что в протеусе не работает- в железе тоже мертвый... Прошу извинения что повторюсь- но вот эти два кода- отредактированные и исправленные с учетом всех вышесказанных критических замечаний... Код написанный и откомпилированный в CCS PICC - работает и в протеусе и в железе!!! Код:
#include "C:\Microchip\_Project_\1c\main.h" #use fast_io(A) void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_comparator(NC_NC); setup_vref(FALSE); set_tris_A(0x28); do{ if(input(PIN_A5)== 1) { set_tris_A(0x28); output_bit(PIN_A1,1); } if(input(PIN_A5)== 0) set_tris_A(0x2A); }while(1); } Код:
unsigned short old_GPIO; void init() { CMCON = 0x07; TRISIO = 0x28; OPTION_REG = 0b11000101; INTCON.GIE = 0; } void main() { init() ; do { old_GPIO = GPIO; if(old_GPIO.F5 == 1) {TRISIO =0x28; old_GPIO.F1 = 1; GPIO = old_GPIO;} if(old_GPIO.F5 == 0) TRISIO =0x2A; } while(1); } На всякий случай показываю схемку на которой в железе пробовал.. |
18.11.2010, 08:25 | #660 | |
Форумец
|
Цитата:
2. О каком дисплее речь? |
|