Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » »Радиолюбитель
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио

Ответ
 
Опции темы
Старый 11.11.2010, 20:54   #631   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
Кстати.... У меня теги тоже чего то не вставляются-может глюк сервера может еще что.. и никаких быстрых кнопок у меня на странице не появляется.. Так что прошу отнестись к этому с пониманием.. Так как уходить пока никуда не собираюсь...
И при чем тут культура общения?- если написанный текст или код не содержит никаких оскорбительных или прочих моментов- так какая разница в тегах он или нет?
  Ответить с цитированием
Старый 12.11.2010, 10:47   #632   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
Кстати.... У меня теги тоже чего то не вставляются-может глюк сервера может еще что.. и никаких быстрых кнопок у меня на странице не появляется.. Так что прошу отнестись к этому с пониманием.. Так как уходить пока никуда не собираюсь...
Как пример можно здесь глянутьhttp://www.microchip.su/showpost.php?p=1144&postcount=1
На БВФ не все теги правильно настроены, но [CODE] работает. Во всяком случае можно и руками их писать.
Цитата:
Сообщение от Butik Посмотреть сообщение
И при чем тут культура общения?- если написанный текст или код не содержит никаких оскорбительных или прочих моментов- так какая разница в тегах он или нет?
Ну если так подходить, то вообще можно без оскорблений весть текст и код написать в одну строку, а потом обижаться, что никто не подсказывает. Нафига кому-то тратить время на колупание в сплошном тексте и выковыривание лишнего, чтобы только добраться до смысла написанного? Так что разница есть.
  Ответить с цитированием
Старый 13.11.2010, 22:33   #633   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
... ну в принципе согласен.... аргументы у Вас коллега железные...
Вот сейчас и проверим... в смысле напишется теги как надо или нет...)))
Вот вопросик возник... Я еще не совсем силен в СИ - вот как например написать на СИ подобный фрагмент на ассемблере- программа в зависимости от изменения уровня на входе контроллера переключает другой вывод на режим входа или выхода- выставляет в 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:34   #634   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
)))) вместо тегов цитата вставилась.... хреновина какая то)))))

кстати в асме этот фрагмент работает- и в железе тоже... проверено

Последний раз редактировалось Butik; 13.11.2010 в 23:19.
  Ответить с цитированием
Старый 13.11.2010, 22:55   #635   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
В железе правда не проверял- в протеусе погонял слегка- вроде работает...
При старте устанавливается автоматом минимальный уровень... но я думаю не проблема сделать по любому...

А на счет тегов- у меня не всегда включается расширенный режим при написании сообщения- видимо глюк сервера или сайта
  Ответить с цитированием
Старый 15.11.2010, 20:47   #636   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
с этих компиляторов с ума сойти можно.... капец какой то...

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'
вот все тот же фрагмент откомпилировал в 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);  
  
}

А вот так в 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   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
с этих компиляторов с ума сойти можно.... капец какой то...
Конечно не одно и тоже, в Си при сравнении на равенство надо писать "==" .
А почему операторы через запятую? Каждый оператор должен точкой с запятой оканчиваться.
Код:
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   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
исправил = на == -картина та же....Хотя и при = компилятор не ругался... А вот когда ставишь вместо запятой точку с запятой- ругается!!!!!!!!!!!!!!
И потом... если в CCS можно писать через запятую(и все работает!!!!)... то почему в MikroC нельзя????
У меня стоит MikroC 8200
  Ответить с цитированием
Старый 15.11.2010, 22:28   #639   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
Вот господа знатоки и подскажите как написать правильно... плиз...
  Ответить с цитированием
Старый 16.11.2010, 07:22   #640   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Доброе утро.
1.Ребят подскажите можно ли в Протеусе добавить инфракрасник и эмулировать нажатия клавиш с пульта.Если да то как.Заранее спасибо.
2.Как только не пробывал, никак не получается вывести на дисплей русское слово.Тестировал в Протеусе(может проблема в нем).

Последний раз редактировалось Азат; 16.11.2010 в 08:12.
  Ответить с цитированием
Старый 16.11.2010, 08:14   #641   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
исправил = на == -картина та же....Хотя и при = компилятор не ругался...
Такие записи правильные, но смысл разный:
Код:
if(tmp == 1) {...}
читается - если tmp равно 1, то выполняется выражение в скобках, если не равно 1, то пропускается.
Код:
if(tmp = 1) {...}
читается - tmp присвоить 1 и если tmp не равно 0 (а оно всегда 1), то всегда будет выполняться условие в скобках.


Цитата:
Сообщение от Butik Посмотреть сообщение
И потом... если в CCS можно писать через запятую(и все работает!!!!)... то почему в MikroC нельзя????
У запятой в в выражениях Си особый смысл, поэтому так делать не надо. Если надо, чтобы выполнилось несколько операторов, то их надо заключить в {......}, в паскале аналог begin.......end:
Код:
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   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
1.Ребят подскажите можно ли в Протеусе добавить инфракрасник и эмулировать нажатия клавиш с пульта.Если да то как.Заранее спасибо.
Не знаю. Делайте в железе избежите много проблем.
Цитата:
Сообщение от Азат Посмотреть сообщение
2.Как только не пробывал, никак не получается вывести на дисплей русское слово.Тестировал в Протеусе(может проблема в нем).
Проблема не в Протеусе. Кодовые страницы компиляторов (т.е. ОС компьютера) не совпадают с таблицей знакогенераторов ЖКИ, отсюда и проблемы, т.е. надо их сопоставлять друг другу. Решений есть несколько. Как вариант - http://www.microchip.su/showpost.php...8&postcount=48
Применение для MikroC:
Код:
LCD_Out_Rus(1,1,"Привет");

Последний раз редактировалось petrd; 16.11.2010 в 08:44.
  Ответить с цитированием
Старый 16.11.2010, 08:56   #643   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Значит если я даже напишу по русски не факт что в протеусе выдет русский текст.Вот я попоробывал как вы сказали.Слово Привет.
Цитата:
void LCD_Out_Rus(char row, char column, char *text)
{
const unsigned char russian_HD44780[]={0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45,
0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7,
0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43,
0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB,
0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF,
0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4,
0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9,
0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78,
0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3,
0xC4, 0xC5, 0xC6, 0xC7};

if (*text)
{
if (*text > 191)
Lcd_Chr(row, column, russian_HD44780[(*text) - 192]);
else
Lcd_Chr(row, column, *text);
}
else
return;
*text++;
while(*text)
{
if (*text > 191)
Lcd_Chr_Cp(russian_HD44780[(*text) - 192]);
else
Lcd_Chr_Cp(*text);
text++;
}
}
void main() {

Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);

do{
LCD_Out_Rus(1,1,"Привет");
delay_ms(1000);
Lcd_Cmd(Lcd_CLEAR);
}while (1);
}
Миниатюры
Нажмите на изображение для увеличения
Название: 2010-11-16_115415.jpg
Просмотров: 14
Размер:	7.0 Кб
ID:	1026850  
  Ответить с цитированием
Старый 16.11.2010, 09:09   #644   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
Значит если я даже напишу по русски не факт что в протеусе выдет русский текст.Вот я попоробывал как вы сказали.Слово Привет.
У меня на столе сейчас лежит WH1602 и с этой функцией работает без проблем. Значит в Протеусе кодовая таблица для ЖКИ отличается от WH, поэтому надо перекодировать массив russian_HD44780[] под знакогенератор модели Протеуса.
  Ответить с цитированием
Старый 16.11.2010, 09:23   #645   
Форумец
 
Сообщений: 8
Регистрация: 20.11.2009

Sedr вне форума Не в сети
Чтобы был русский в протеусе надо поменять библиотеку LCDALPHA.DLL в C:\Program Files\Labcenter Electronics\Proteus 7 Professional\MODELS.
Вложения
Тип файла: rar LCDALPHA.rar (35.2 Кб, 58 просмотров)
  Ответить с цитированием
Старый 16.11.2010, 09:39   #646   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Спасибо все заработало.
  Ответить с цитированием
Старый 16.11.2010, 10:16   #647   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Должно написаться в первой строке Инициализация.Во второй заполнить нулем.Как заполнить знаком черным квадратом вместо нуля.И вообще правильно ли я сделал.
Цитата:
unsigned char j=0;
void LCD_Out_Rus(char row, char column, char *text)
{
const unsigned char russian_HD44780[]={0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45,
0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7,
0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43,
0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB,
0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF,
0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4,
0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9,
0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78,
0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3,
0xC4, 0xC5, 0xC6, 0xC7};

if (*text)
{
if (*text > 191)
Lcd_Chr(row, column, russian_HD44780[(*text) - 192]);
else
Lcd_Chr(row, column, *text);
}
else
return;
*text++;
while(*text)
{
if (*text > 191)
Lcd_Chr_Cp(russian_HD44780[(*text) - 192]);
else
Lcd_Chr_Cp(*text);
text++;
}
}
void main() {
CMCON = 7; // Все выводы цифровые входы-выходы
TRISA=0b11110111; // все выводы PORTA на вход, RA3 - выход
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
LCD_Out_Rus(1,1,"Инициализация");
while (1)
{
delay_ms(500);
j++;
LCD_Out(2,j,"0"); //Черный квадрат вместо нуля
if(j==16) {break ;} /* если условие if выполнилось, то прерываем выполнение цикла while */
}
while(1){Lcd_Cmd(Lcd_CLEAR);/* бесконечный цикл */};
}
  Ответить с цитированием
Старый 16.11.2010, 10:36   #648   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
Как заполнить знаком черным квадратом вместо нуля.
В общем случае пользователь может сформировать до 8-ми своих символов в CGRAM. C квадратом проще, в Вашем случае вместо
Код:
LCD_Out(2,j,"0");
должно помочь:
Код:
Lcd_Chr(2, j, 0xff);
  Ответить с цитированием
Старый 16.11.2010, 10:48   #649   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Да помогло.Только все это дело зависает на 15,09с в протеусе.С начала очищает экран,и протеус зависает.

Последний раз редактировалось Азат; 16.11.2010 в 11:05.
  Ответить с цитированием
Старый 16.11.2010, 11:14   #650   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
Да помогло.Только все это дело зависает на 15,09с в протеусе.С начала очищает экран,и протеус зависает.
Может так?
Код:
while (1)
 {
   delay_ms(500);
   j++;
   if(j != 17) 
         LCD_Out(2,j,"0");
   else
     {
       j = 0;
       Lcd_Cmd(Lcd_CLEAR);
     }
  }
  Ответить с цитированием
Старый 16.11.2010, 11:29   #651   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
1.Почему в протеусе зависает?
2.Правильно ли я сделал нажатие кнопки?
3.Как сделать при первом нажатие надпись осталась,при втором убралась?
3.Как правильно очистить первую строку, чтоб не моргала?

Цитата:
#define SetBut Button(&PORTB, 7,10,0)
unsigned char j=0, i=0;
void LCD_Out_Rus(char row, char column, char *text)
{
const unsigned char russian_HD44780[]={0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45,
0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7,
0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43,
0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB,
0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF,
0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4,
0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9,
0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78,
0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3,
0xC4, 0xC5, 0xC6, 0xC7};

if (*text)
{
if (*text > 191)
Lcd_Chr(row, column, russian_HD44780[(*text) - 192]);
else
Lcd_Chr(row, column, *text);
}
else
return;
*text++;
while(*text)
{
if (*text > 191)
Lcd_Chr_Cp(russian_HD44780[(*text) - 192]);
else
Lcd_Chr_Cp(*text);
text++;
}
}
void main() {
CMCON = 7; // Все выводы цифровые входы-выходы
TRISA=0b11110111; // все выводы PORTA на вход, RA3 - выход
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
LCD_Out_Rus(1,1," Инициализация");
while (1)
{
delay_ms(100);
j++;
Lcd_Chr(2, j, 0xff);
if(j==17) {break ;}
}
do {
LCD_Out(1,1," "); если поставить команду очистить то моргает?
if (SetBut) {
LCD_Out_Rus(2,1," Кнопка нажата ");
}
else{
LCD_Out_Rus(2,1,"Кнопка не нажата");
}
} while(1);
}

Последний раз редактировалось Азат; 16.11.2010 в 15:40.
  Ответить с цитированием
Старый 16.11.2010, 20:35   #652   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
1.Почему в протеусе зависает?
2.Правильно ли я сделал нажатие кнопки?
3.Как сделать при первом нажатие надпись осталась,при втором убралась?
4.Как правильно очистить первую строку, чтоб не моргала?
1. Сначала вопрос - почему не работает в Протеусе, потом будет - почему работает в Протеусе и не работает в железе. Протез он и есть протез, не доверяю ему.
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,"                ");

}
4. Команда очистки ЖКИ очень долго выполняется (время см. в DS) и чистит весь экран, быстрее пробелами чистить нужные места :
Код:
 LCD_Out(1,1,"                "); // строка в 16 пробелов
  Ответить с цитированием
Старый 16.11.2010, 21:50   #653   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
Цитата:
Сначала вопрос - почему не работает в Протеусе, потом будет - почему работает в Протеусе и не работает в железе. Протез он и есть протез, не доверяю ему.
А чему тогда доверять? Иногда ж возникает потребность пощупать схему не воспроизводя в железе????
  Ответить с цитированием
Старый 17.11.2010, 13:35   #654   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Ребят объясните пожалуйста
TRISA=0b11110111; // все выводы PORTA на вход, RA3 - выход
0b11110111 как понять что из них RA3 или где прочитать?
  Ответить с цитированием
Старый 17.11.2010, 14:53   #655   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
А чему тогда доверять? Иногда ж возникает потребность пощупать схему не воспроизводя в железе????
Железу. Это мое личное мнение и только. Кто с чем хочет, с тем пусть и работает это дело каждого. Слышал про глюки от других и лично с Протеусом наступал на грабли - модуль CCP в режиме запуска специального события не сбрасывал TMR1. Вот и выше у Азат зависает, вроде ничего такого по коду не видно, а виснет.

Азат
Цитата:
0b11110111 как понять что из них RA3 или где прочитать?
В DS где написано про регистры TRISx.
Кстати, со вчерашней проблемой разобрались?
  Ответить с цитированием
Старый 17.11.2010, 15:03   #656   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Для всех и для пишуших на ассемблере в частности. Очередной бестселлер от 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   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 58

Butik вне форума Не в сети
За ссылку огромное спасибо!!!!!! Вроде и азбучные истины но часто попадаешь впросак- забываешь... то о том то об этом...)))

Теперь вот о доверии Протеусу и прочему всему подобному... Вот я выше писал о проблемке- два совершенно одинаковых фрагмента- но из разных компиляторов- и ведут себя по разному...Но... тот вариант из них что работает в протеусе- работает и в железе..
а тот что в протеусе не работает- в железе тоже мертвый...
Прошу извинения что повторюсь- но вот эти два кода- отредактированные и исправленные с учетом всех вышесказанных критических замечаний...

Код написанный и откомпилированный в 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);  
  
}
А вот код из MikroC - в протеусе не работает.. и в железе тоже...Мертво держит на выводе GPIO,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);
}
У меня MikroC Pro 4,15 версия А ПРОТЕУС 7,5 SP3.... Может у меня что не так с компилятором ? MikroC в смысле???? Или глючный попался... Если так то плиз.. дайте ссылочку где качнуть рабочий...Кстати, какой из них лучше- про или обычный... и можно ли поставить сразу два

На всякий случай показываю схемку на которой в железе пробовал..
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 41
Размер:	11.9 Кб
ID:	1029249  
  Ответить с цитированием
Старый 18.11.2010, 08:25   #659   
Форумец
 
Сообщений: 82
Регистрация: 13.09.2010

Азат вне форума Не в сети
Поставить можно сразу два mikroC и mikroC pro.У меня стоит mikroC pro 3.8 и mikroC 8.2.
  Ответить с цитированием
Старый 18.11.2010, 08:25   #660   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 53
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Азат Посмотреть сообщение
Да спасибо огромное пробывал по разному, с кнопками поиграл.)
1.Петр где можно нормальный русский ds скачать(или если не трудно вложите здесь).
2.Подскажите пожалуйста как реализовать bmp рисунок чтоб отобразился на дисплее.Т.е хочеться чтоб на экране было 4 рисунка подряд ввиде 4 кнопок.
1. Самый нормальный DS - от производителя и на английском, все остальное около и с ошибками, надо осваивать английский. Кое-что на русском здесь - http://www.microchip.ru/lit/?mid=1x0. Есть еще книги - В.А. Ульрих "Микроконтроллеры PIC16X7XX" (тот же даташит на семейство PIC16), Яценков "Микроконтроллеры Microchip с поддержкой USB"(тот же даташит на семейство PIC18).
2. О каком дисплее речь?
  Ответить с цитированием
Поиск в теме: 


Опции темы

Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind