MPLAB в вопросах и ответах

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: MPLAB и русский беда.

Сообщение Аlex »

Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

Еще одна глобальная проблема, не могу создать

unsigned char temp[10]; или
char fuck[21];
в общем любой char в любом месте кода.

Опубликованы в коде пару чаров и больше не дает создать, выдает только на один опубликованый чар вот таких море ошибок.

Error [1253] double.c; 55. could not find space (101 bytes) for auto/param block
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 649. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 461. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 475. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 485. can't generate code for this expression
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\sources\llmod.c; 21. could not find space (101 bytes) for auto/param block
Error [1253] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 73. could not find space (101 bytes) for auto/param block
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\include\lcd887.h; 103. could not find space (101 bytes) for auto/param block

Компилятор Hi-tech C Pro
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

pro в мусор, пользовать стд.
и хотелось бы видеть текст, кроме ошибок.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

А чего за std ? Дайте полное название. Перейду.

А полный текст вот.

Спойлера не хватает. Чего то я не нашел тут. Есть какие то LIST но не пашут.


Код: Выделить всё

#define _XTAL_FREQ  20000000   // Define Frequency 20.0 MHz for function __delay_ms
//#include <pic.h>   // Include header file for MCU
#include <lcd887.h>   // Include Library for i2c bus
#include <1wire887.h>   // Include Library for 1-Wire bus
#include <string.h>   // Include Library for LCD display
#include <stdio.h>   // Include Library for LCD display
#include <encoder.h>

__CONFIG(HS & WDTDIS & LVPDIS);   // Config. High speed clock,Disable watchdog and Disable LVP

unsigned long freq=0, count = 0, time1 = 0, sys1 = 0;
char flag_capture = 0;   // Keep status capture working
int resh = 0, resl = 0, maxadc = 0, adc=0, press = 0, iclr = 0, iclr1 = 0;
int it = 0, EncP = 0, TD = 0, TU = 0, knt = 0, processID = 0, Delay1 = 0;
int vak = 100, gister = 50;
unsigned long TimeLCD1 = 0,  TimeLCD2 = 0, TimeStop = 0, timetemp = 0, TimeClose = 0, TimeOpen = 0, idleTime = 0, dispDel = 0;
unsigned int TimeUp = 0, TimeDn = 0, TimeAll = 1;
unsigned char menuId = 10;
char temp[12], vtemp[10];
             

void Delay_ms(unsigned int tick)
{
   while(tick--)   // Loop counter delay time
   {
      __delay_ms(1);   // Delay 1 ms
   }
}

void Delay_sound(unsigned int tick)   // Delay 100 us per tick
{
   while(tick--)
   {
      __delay_us(90);    // Delay 90 us     
   }
}
void Sound(unsigned int freq,unsigned int time)
{
   unsigned int dt=0,m=0;   // Keep value and
   TRISC0 = 0;    // Set RC0 output mode
   dt = 5000/freq;      // Keep active logic delay
   time = (5*time)/dt;   // Keep counter for generate sound
   for(m=0;m<time;m++) // Loop for generate sound(Toggle logic P0.12)   
   {
      RC0 = 1;    // RC0=1
      Delay_sound(dt);   // Delay for sound   
      RC0 = 0;    // RC0=0     
      Delay_sound(dt);   // Delay for sound
   }      
}


void interrupt CCP1_INT(void)
{
   if (INTF)
   {
      INTF = 0;
      count++;
      if (time1 == 0) time1 = sys1;
      else if (sys1 - time1 > 1000)
      {
         freq = count;
         time1 = 0;
         count = 0;
      }
   }
   if (T0IF)
   {
      sys1+=13;   // 13
      TMR0=3;  // 3
      T0IF = 0;
   }
}


//---------- Температура ----------
unsigned int read_temp(void)
{
   unsigned char temp_buff[2];   // Keep raw temp.
   char err_status;   // Keep respond status
   err_status = onewire_reset();   // Reset onewire bus
   if(err_status==0)      // Check connection to DS1820
   {
      onewire_write_byte(0xCC);    // Skip ROM
      onewire_write_byte(0x44);     // Start Conversion
      //   __delay_us(120);   // Delay 120 us for state
      onewire_reset();   // Restart
      onewire_write_byte(0xCC);    // Skip ROM
      onewire_write_byte(0xBE);    // Read Scratch Pad

      temp_buff[0] = onewire_read_byte(); // Keep raw data
      temp_buff[1] = onewire_read_byte(); // Keep raw data
   }
   return((temp_buff[1]<<8)+temp_buff[0]);   // Return raw data
}


int i = 0, kn1 = 0, kn2 = 0, kn3 = 0,kn4=0,kn5=0,kn6=0,knplus = 0;

void pressure()
{
   GODONE = 1;      // Start conversion
   while(GODONE);   // Wait until conversion success
   press = ADRESH<<2; //0-1020
}


//---------- Process ----------

void mainprocess()
{
   //   vak = 600; // 800 максимум
   //   gister = 100;
   if (processID == 0)
   {
      PORTE = 0b000;
   }
   else if (processID == 1)
   {
      PORTE = 0b101; //Запустить насос закрыть сброса открыть перепуск
      if (timetemp == 0) timetemp = sys1;
      else if (sys1 - timetemp > 150)
      {
         timetemp = 0;
         //Delay_ms(150);
         PORTE = 0b110;
         processID = 11;
      }
   }
   else if (processID == 11)
   {
      // меряем давление
      if (press >= vak)
      {
         PORTE = 0b000;
         //if (TimeOpen == 0) TimeOpen = sys1;
         //      else if (sys1 - TimeOpen > 400)
         //{
         TimeOpen = 0;   
         Delay_ms(400);
         PORTE = 0b011; // Отключили насос, открыли все клапана.
         processID = 2;
         //}
      }
   }
   else if (processID == 2)
   {
      if (press <= gister)
      {
         PORTE = 0b000;
         //if (TimeClose == 0) TimeClose = sys1;
         //      else if (sys1 - TimeClose > 450)
         //{
         TimeClose = 0;
         Delay_ms(450);
         PORTE = 0b001; // По достиж. нижнего давления закрыли перепуск открыли сброс
         processID = 1;
         //}
      }
   }
   if (processID == 3)
   {
      if (press > 100) PORTE = 0b011;
      //if (TimeStop == 0) TimeStop = sys1;
      //      else if (sys1 - TimeStop > 100)
      //  {
      TimeStop = 0;
      Delay_ms(100);
      if (press < 100)
      {

         PORTE = 0b000;
         processID = 0;

      }
      //}
   }
}

unsigned char encoder1roll = 0, encoder2roll = 0;

void StepUp(void) {
   encoder1roll = 1;
}

void StepDn(void) {
   encoder1roll = 2;
}

void StepUp2(void) {
   encoder2roll = 1;
}

void StepDn2(void) {
   encoder2roll = 2;
}


//Инициализация дисплея в соответсвие с пунктом меню
void initDisplay(){
   if (menuId == 0 ) {
      //Основной дисплей!!
      //Вывод вакум таймер и состояние, стоп пауза или работает
      lcd_clear();
      lcd_puts(128,(char *)"Разряжение:");
   }
   else if (menuId == 1 ) {
      //Настройка вакума!!
      lcd_clear();
      lcd_puts(128,(char *)"Разряжение_");
   }
   else if (menuId == 2 ) {
      //Настройка гистрезиса!!
      lcd_clear();
      lcd_puts(192,(char *)"Гистерезис_");
   }
   else if (menuId == 3 ) {
      //Таймер верх!!
      lcd_clear();
      lcd_puts(128,(char *)"Таймер верх:");
   }
   else if (menuId == 4 ) {
      //Таймер низ!!
      lcd_clear();
      lcd_puts(128,(char *)"Таймер низ:");
   }
   else if (menuId == 5 ) {
      //Обороты вентилятра, температуры!!
      lcd_clear();
      lcd_puts(128,(char *)"Темп. насоса: ");
      lcd_puts(192,(char *)"Обороты: ");
   }
   else if (menuId == 6 ) {
      //Таймер отчета времени!!
      lcd_clear();
      lcd_puts(128,"Время работы");
   }
   else if (menuId == 7 ) {
      //Установка Таймер верх!!
      lcd_clear();
      lcd_puts(128,(char *)"Таймер верх_");
        utoa(temp,65,10);
        lcd_puts(140,temp);
   }
   else if (menuId == 8 ) {
      //Установка Таймер низ!!
      lcd_clear();
      lcd_puts(192,(char *)"Таймер нижн_");
   }
   else if (menuId == 9 ) {
      lcd_clear();
      lcd_puts(128,(char *)"Установка таймера");
   }
}











/*
0 - Основной дисплей
1 - Настройка вакума
2 - Настройка гистрезиса
3 - Таймер верх
4 - Таймер низ
5 - Обороты вентилятра, температуры
6 - Таймер отчета времени
7 - Установка Таймер верх
8 - Установка Таймер низ
9 - Установка Таймер отчета времени
*/

unsigned char encoder1ButPrev = 1, encoder2ButPrev = 1;
unsigned char encoder1pressed = 0, encoder2pressed = 0;

void execEncoder1But(void) {
   if (encoder1ButPrev==0 && RA3==1) { 
      //Кнопку отпустили после нажатия
      encoder1pressed =1; //Подняли флаг что кнопка нажата
   }
   if (encoder1ButPrev != RA3) encoder1ButPrev = RA3;

   if (encoder2ButPrev==0 && RC5==1) {   
      //Кнопку отпустили после нажатия 
      encoder2pressed =1; //Подняли флаг что кнопка нажата 
   } 
   if (encoder2ButPrev != RC5) encoder2ButPrev = RC5; 
}


void inputProcess(){
   unsigned char isIdle = 1; //Флаг простоя
   unsigned char menuIdprev = menuId; //Запомним текущее меню

   //Крутят энкодер1 ----------
   if (encoder1roll) {
      Sound(2000,10); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      //Если мы не в вакуме и не в гистрезисе переходим в вакум
      if (menuId!=1 && menuId!=2) menuId = 1;

      if (menuId==1) {
         //Меняем значение вакума!!!
         vak += (encoder1roll==1)? 10 : -10;
      }
      if (menuId==2){
         //Меняем значение гистрезиса!!!
         gister += (encoder1roll==1)? 10 : -10;
      }
      encoder1roll = 0;
   }
   //<<----------

   //Нажали энкодер1 ----------
   if (encoder1pressed == 1)
   {
      Sound(2000,30); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      //Если мы не в вакуме и не в гистрезисе переходим в вакум
      if (menuId!=1 && menuId!=2) menuId = 1;

      //Переключаемся между вакумом и гистрезисом

      else menuId = (menuId==1)? 2 : 1;

      encoder1pressed = 0;
   }
   //<<----------//Крутят энкодер2 ----------
   if (encoder2roll)
   {
       Sound(2000,10); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      //Если мы не в изменении значений по энкодеру 2
      if (menuId!=7 && menuId!=8 && menuId!=9)
      {
         if (encoder2roll==1){
            if (menuId==0 || menuId==10) menuId=3; 
            else if (menuId==3) menuId=4; 
            else if (menuId==4) menuId=5;   
            else menuId=0;
         } else {
            if (menuId==0 || menuId==10) menuId=5; 
            else if (menuId==3) menuId=0; 
            else if (menuId==4) menuId=3; 
            else if (menuId==5) menuId=4; 
            else menuId=5;
         }
      }
      else
      {
         if (menuId==7) {
            TimeUp += (encoder2roll==1)? 1 : -1;
            //Меняем значение Таймер верх!!
         }
         else if (menuId==8)
         {
            //Меняем значение Таймер низ!!!
            TimeDn += (encoder2roll==1)? 1 : -1;
         }
         else if (menuId==9)
         {
            TimeAll += (encoder2roll==1)? 1 : -1;
            //Меняем значение Установка таймер отчета времени!!
         }
      }
      encoder2roll = 0;
   }
   //<<----------

   //Нажали энкодер2 ----------
   if (encoder2pressed==1){ 
Sound(2000,30); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      if (menuId==7 || menuId==8 || menuId==9) menuId = 0; //Переход в основной вывод
      else {
         if (menuId==0 || menuId==10) menuId = 9; //Переход в Установка таймер отчета времени
         if (menuId==3) menuId = 7; //Переход в Установка таймер верх
         if (menuId==4) menuId = 8; //Переход в Установка таймер низ
      }           
      encoder2pressed = 0;
   }
   //<<----------


   //Нажали кнопку старт ----------
   if (RB2 == 0){
      Sound(3000,30); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      menuId = 0; //Переходим в основной дисплей
      //Стартуем если нада
      if (processID==0) processID=1; //Запуск со стопа
      //Добавь в старт проверку даваления и если вакум есть,
      //то открывай клапан и выжидай сборс
   }
   //<<----------

   //Нажали кнопку пауза стоп ----------
   if (RB1 == 0){
      Sound(2000,30); // Sound 2000Hz,0.5 sec
      isIdle = 0; //Сбрасываем флаг простоя
      menuId = 0; //Переходим в основной дисплей
      //Проверка и отработка стопа или паузы
      processID = 0;
      processID = 3;
   }
   //<<----------


   //Простой
   if (isIdle==0) idleTime = sys1; //Сбрасываем таймер простоя
   if (sys1 - idleTime > 3000)
   {
      if (menuId!=0) menuId = 0; //Если долго не трогают меню перейти в основной дисплей
      idleTime=sys1;
   }
   //Перерисуем дисплей в соответсвие с новым меню если нада
   if (menuIdprev != menuId) initDisplay();

}


void redrawDisplay()
{
   char v[10];
   if (dispDel == 0) dispDel = sys1;
   else if (sys1 - dispDel < 100) return;
   dispDel = sys1;
   if (menuId == 0 )
   {
      //Основной дисплей!!
      //Вывод вакум таймер и состояние, стоп пауза или работает
      itoa (v,press,10);
      if (press >= 100) iclr = 0;
      if (press < 100)
      {
         if (iclr == 0)
         {
            lcd_puts(140,(char *)"   ");
            iclr = 1;
         }
      }
      if (press >= 10) iclr1 = 0;
      if (press < 10)
      {
         if (iclr1 == 0)
         {
            lcd_puts(140,(char *)"   ");
            iclr1 = 1;
         }
      }
      if (TimeLCD1 == 0) TimeLCD1 = sys1;
      else if (sys1 - TimeLCD1 > 100)
      {
         TimeLCD1 = 0;
         lcd_puts(140,v);

      }
   }
   else if (menuId == 1 )
   {
      //Настройка вакума!!
      //sprintf(v,"%ld   ",vak);
      if (TimeLCD1 == 0) TimeLCD1 = sys1;
      else if (sys1 - TimeLCD1 > 200)
      {
         TimeLCD1 = 0;
         utoa(v,vak,10);
         lcd_puts(140,(char *)"   ");
         lcd_puts(140,v);
      }
   }
   else if (menuId == 2 ) {
      if (TimeLCD1 == 0) TimeLCD1 = sys1;
      else if (sys1 - TimeLCD1 > 200)
      {
         TimeLCD1 = 0;
         utoa(v,gister,10);
         lcd_puts(204,(char *)"   ");
         lcd_puts(204,v);
      }
      //Настройка гистрезиса!!
   }
   else if (menuId == 3 ) {
     // utoa(vtemp,TimeUp,10);
      //lcd_puts(140,vtemp);
      //Таймер верх!!
   }
   else if (menuId == 4 ) {
      //Таймер низ!!
   }
   else if (menuId == 5 )
   {
//lcd_puts(142,v);
      //Обороты вентилятра, температуры!!
   }

   else if (menuId == 6 ) {
      //Таймер отчета времени!!
   }
   else if (menuId == 7 ) {
      //Установка Таймер верх!!
   }
   else if (menuId == 8 ) {
      //Установка Таймер низ!!
   }
   else if (menuId == 9 ) {
      //Установка Таймер отчета времени!!
   }
}


void main()
{
   lcd_init();      // Initial LCD
   const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
   lcd_puts(128,(char *)logo1);
   TRISC2 = 0;

   //---------- Блок шим ----------
   STRA = 1;      // Use P1A(RC1 pin)generate PWM output signal
   //   STRB = 0;      // Use P1B(RD5 pin)generate invert PWM output signal
   TRISC1 = 0;      // Set RC1 output mode
   //   PWM2CON |= 0x3F;   // Delay time 12.8 us нет в моем контроллере
   CCP2CON = 0x8C;   // CCP1 PWM mode,CCP1M3:CCP1M0=1100,P1M1:P1M0=10
   PR2 = 0xFF;      // Set Period counting
   TMR2IF =0;      // Ensure Clear overflow flag timer2
   T2CON |= 0x01;   // Prescaler 4
   T2CON |= 0x04;      // Start timer2
   CCP2CON |= 0x30;   // CCP1 PWM mode
   // CCPR2L = 225;
char v[10];
//unsigned char VTemp[10];
   unsigned int temp;      // Keep raw temp.
   T1CKPS0 = 1;
   T1CKPS1 = 1;
   TMR1CS = 0;      // Use internal clock source
   T1SYNC = 0;      // Synchronize external clock input
   //   ANS8 = 0;      // Set RB0 as digital port


   //---------- для проса кнопок ----------
   ANSEL=0;
   ANSELH=0;
   RBPU = 0;
   TRISB = 0b11111111;      // Set RB input mode
   TRISE = 0b000;
   PORTE = 0b000;
   PORTB = 0b11111111;


   //---------- Инит измерения вакуума ----------

   TRISA = 0b111111;      // Set RA2 input mode
   RA1 = 0;
   RA2 = 0;
   //   ANS2 = 1;      // Set RA2 analog port
   ADCON0 = 0b11000001;   // Select RC Mode,ANS2 active,ADON=1
   ADCON1 = 0b00001110;



   //---------- для таймера ----------
   TMR0 = 3;
   T0CS = 0;  // select internal clock
   T0SE = 0;  //Reacting low to high edge
   PSA = 0;   //Working with prescaler
   PS0 = 1;   //Prescale settings bit 0
   PS1 = 1;   //Prescale settings bit 1
   PS2 = 1;   //Prescale settings bit 2
   T0IE = 1;  // enable timer interrupt
   //   GIE = 1;   // enable global interrupts
   INTE = 1;
   INTEDG = 1;
   GIE = 1;
   ANSELH = 0;
   RBPU = 0;
   lcd_clear();
    Sound(3000,150); // Sound 2000Hz,0.5 sec
   Sound(2000,50); // Sound 2000Hz,0.5 sec
   Sound(1000,50); // Sound 2000Hz,0.5 sec
   Sound(500, 50); // Sound 2000Hz,0.5 sec
   lcd_puts(128,(char *)"Готов к работе!");
   lcd_puts(192,(char *)"Прошивка V1.0");




   //---------- ГЛАВНЫЙ ЦИКЛ ----------

   while(1)   // Infinite loop
   {   
      unsigned char v1[10];     
      Encoder_Exe();
      Encoder_Exe2();
      execEncoder1But();
      inputProcess();
      redrawDisplay();
      mainprocess();
      //utoa(v1,PORTB,10);
      //lcd_puts(128,v1);

      unsigned long freq1 = freq * 30;
      char freq_str[16];
      // temp_str[16];      // Не пашет сука
      sprintf(freq_str,"%ld       ",freq1);   // Convert frequency to string
      



      temp = read_temp()>>1;   // Read temp.
      if (temp < 30)
      {
         it = 0;         
         RC2 = 0;
         CCPR2L = 255;
      }
      else if (temp > 30 && temp < 40)
      {
         RC2 = 1;
         CCPR2L = 255 - temp;  // 1080 об/мин -1080
      }
      else if (temp > 40 && temp < 50)
      {
         RC2 = 1;
         CCPR2L = 255 - temp*2;  // 1590 об/мин - 1830
      }
      else if (temp > 50 && temp < 60)
      {
         RC2 = 1;
         CCPR2L = 255 - temp*3;  // 2370 об/мин - 2580
      }
      else if (temp > 60)
      {
         CCPR2L = 0;  // 2880 об/мин
      }
       utoa(v,temp,10);

       lcd_puts(142,v);
      //   lcd_puts(142,temp_str);



      //---------- Вакуум меряем ----------

      pressure();
      press = 960 - press;
      press = (press/10) * 10;
      if (press < 0) press = 0;




      //---------- Энкодер------------------------------------
   }

}
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

std - это стандартная, pro - больная.
В новых компиляторах выбирают, в каком работать, как - не помню :) я работаю в основном на 9.60 std pl3

Перенесите все объявления переменных вверх, это не с++
не

lcd_init(); // Initial LCD
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_puts(128,(char *)logo1);
TRISC2 = 0;
char v[10];

а

char v[10];
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте

lcd_init(); // Initial LCD
lcd_puts(128,(char *)logo1);



Дальше, размер 1 функции желательно вместить в размер экрана монитора, у Вас читать невозможно.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

urry писал(а):std - это стандартная, pro - больная.
В новых компиляторах выбирают, в каком работать, как - не помню :) я работаю в основном на 9.60 std pl3


Дальше, размер 1 функции желательно вместить в размер экрана монитора, у Вас читать невозможно.


У меня просто монитор 24 дюйма с разрешением 1920Х1080 У меня даже еще много много места остается.
Я конечно размещаю так что бы все читалось.

Щас порядок наведу.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

Бесполезно куда не суешь не получается все равно
could not find space (101 bytes) for auto/param block
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

тогда Вам повезло с монитором больше.
Дальше, кстати, у Вас матерится на нехватку оперативки.
Почему - автосоздаваемые переменные размещаются только в 0 банке.
Распихайте их по банкам ручками.
bank1 char v[10];
например
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

Уууу, блин! Огромное спасибо за помощь. Неделю бьюсь.
Все пошло как по маслу но все равно какие то проблемы с char
Заново объявленные не работают. Только те которые были когда то объявлены.
Хотя по памяти разпределил.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

что значит - не работают ?
забастовку объявили ?
короткий пример с демонстрацией трабла приведите.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

Код: Выделить всё

char time[10];
sprintf(time,"%d  ",TimeUp);
lcd_puts(128,time);


Если вместо TimeUp ченить вручную прописать типа 123 не выводится на дисплей.
Если в puts прописать вместо time "123"
На дисплее 123
Причем где я только не объявляю char time[10]; и вверху самом и в теле void и не пашет.
В Watch выводишь time пусто, а если выводишь TimeUp то не пусто.



А еще в тупик воткнулся, занято 6100 кб Памяти или еще чего в пике я так понимаю. MPLAB умеет выводить емкость программы.
У меня виснет прошивка. Что делать. Как сам код распределить по банкам? Все переменные я закинул в банк1.
А само тело программы где располагается? Как его по банкам раскидать?

И что самое интересное проверял только что. Комментируешь пару функций, например.
lcd_puts(128,"писец памяти");
смотрю занято 5980. Прошивка запускается.
Завожу переменную например PS. Делаю в теле PS++; Памяти сразу например 6100. И прошива виснет.


В общем как только прога зашкаливает за 6100 все виснет.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

Код: Выделить всё

Если вместо TimeUp ченить вручную прописать типа 123 не выводится на дисплей.
У меня виснет прошивка. Что делать. Как сам код распределить по банкам? Все переменные я закинул в банк1.
А само тело программы где располагается? Как его по банкам раскидать?

Это неправильно. Но у меня нет Вашего компилятора проверить - кстати, подключая хидер <stdio.h> с функцией спринтф, Вы сразу теряете много памяти.
Погуглите лучше на тему итоа.
флеши вроде хватает, скорее всего, проблема в стеке, вернее, в его переполнении, посмотрите отладчиком границу стека.
Я здесь недавно давал совет на тему - поставить памятник 16ф84 и больше его не трогать...
Как бы не вижу смысла юзать дедушку 16ф877, если за те же деньги (кстати, дешевле!) можно взять 24ф16ка102 и не задумываться, в каком месте рушится стек и куда прятать переменные.
Применение пиков этой линейки -- малоножечные легкие варианты, аналогов чего у других производителей нет.
Ну имхо.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

utoa не подходит, там не затираются предыдущие знаки. Неудобно.

Ну я только с нуля изучаю это все. С опытом все получится.
Кстати в 16f887 все пины заняты у меня. Только под память внешнюю 2 пина свободны. Буду ее тоже использовать.
А нет еще RA5 , RA4 Свободны. Все остальное битком.

А посмотрел даташиту на 102 там мало. Ну конечно если будет другой какой то проект например термометр, то даже избыток. Смотря какие задачи
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

(с) Наш путь к вершине бесконечно труден...
То лбом об стену, то наоборот...
Макаревич.

Если бы вы потрудились посмотреть шит на другой контроллер , то наверняка обнаружили бы там больше ножек.Больше того, даже взяв какой - нить 18 пик (который я , кстати, не рекомендую) - ну например 18ф452 и приложили к Вашей плате, Вы увидели бы, что ножки совпадают. Ну это к слову.

Существует определенное количество граблей, на которые человек должен наступить лично.
Не мешаю больше.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

На счет граблей это однозначно.
Ну я конечно позже перелопачу все контроллеры какие есть. Я попробовал что это и теперь хоть знаю что то.
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Re: MPLAB и русский беда.

Сообщение AVT-28 »

urry писал(а):(с) Наш путь к вершине бесконечно труден...

Если бы вы потрудились посмотреть шит на другой контроллер , то наверняка обнаружили бы там больше ножек.Больше того, даже взяв какой - нить 18 пик (который я , кстати, не рекомендую) - ну например 18ф452 и приложили к Вашей плате, Вы увидели бы, что ножки совпадают. Ну это к слову.
Не мешаю больше.


А как они могу совпадать если ножек больше?? :)
У меня макетка только на 40 ног.
В будущем для AVR преобрету и тоже поизучаю и для Atiny. Надо все попробовать, у каждого свои особенности, и уже выбрать свое что то.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: MPLAB и русский беда.

Сообщение urry »

я , собственно, имел в виду это, в доке
И ВЫ не выбираете, в чем вам писать...
Ну это крайняя моя к вам запись, как обещал
Вложения
Doc3.doc
(427 КБ) 303 скачивания
kazmirchuk
Родился
Сообщения: 7
Зарегистрирован: Чт окт 27, 2011 11:56:57

Запись пиков в mplab

Сообщение kazmirchuk »

Добрый день. Возникла производственная необходимость записывать пики в мплабе. Заранее прошу меня простить, если буду писать ерунду, т.к. о программировании имею весьма общее представление. На данный момент имеются: контупер, подключенный и заведомо рабочий программатор, мплаб 8.80, папка с программами, ну и собственно сами пики. Мой предшественник записывал именно эти программы и именно на этом программаторе, поэтому имею уверенность что все оно рабочее. Очень хотелось бы, чтобы мне пошагово объяснили порядок действий на примере, доупустим, 12F629. Файлы для записи имеют вот такой вид:
Изображение
Буду очень признателен, если добрые люди мне помогут )
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Запись пиков в mplab

Сообщение otest »

Открыть проект в MPLAB файлом с расширением .mcp .В МК записывают файлы с расширением .НЕХ или .hex . MPLAB- Debuger- выбираете свой программатор. Configure-Select Device- выбирате свой МК.
kazmirchuk
Родился
Сообщения: 7
Зарегистрирован: Чт окт 27, 2011 11:56:57

Re: Запись пиков в mplab

Сообщение kazmirchuk »

Нажимаю project - open, в открывшемся окошке выбираю проэкт leds.mcp, нажимаю "открыть" и ничего не происходит. Вообще ничего
Ответить

Вернуться в «PIC»