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

Простые вопросы новичка.


Рекомендуемые сообщения

нифига ты не понял. атомарный доступ так и не сделал

у тебя в функции

void ledprint(unsigned int dat){
    R1 = dat%10;
    R2 = dat%100/10;
    R3 = dat%1000/100;
}

при вызове прерывания идет порча данных.

должно быть

void ledprint(unsigned int dat){
   unsigned char tempR1,tempR2,tempR3; 
    tempR1 = dat%10;
    tempR2 = dat%100/10;
    tempR3 = dat%1000/100;
    GIE=0;
     R1=tempR1;
     R2=tempR2;
     R3=tempR3
    GIE=1;
}

 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

и в прерывании ерунду написал , говорил же ифы вместо кейса в данном случае глупость увеличивающий время выполнения кода

     if(T0IF)
      {
         T0IF=0;
         PORTA=000000;
  switch (n_count) {
     case 1:
      data_submit(digits[R1]);
      PORTA=000001;
      n_count=2;
      break;
    case 2:
      data_submit(digits[R2]);
      PORTA=000010;
      n_count=3;    
      break;
    case 3:
      data_submit(digits[R3]);
      PORTA=000100;
      n_count=1;
      break;
    default:
      n_count=1;
    }
} 

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

через case 1:     у меня не получилось,но я пока пробую ,читаю не буду лукавить , а как написал считает четко если не считать небольшую засветку И счет идет, но только до 256 и опять начинает с нуля:

void interrupt Timer (void)
   {
    if(T0IF)
      {
         T0IF=0;
         if(n_count==0){
         PORTAbits.RA2 = 0;
         PORTAbits.RA1 = 0;
         PORTAbits.RA0 = 1;
         data_submit(digits[R3]);
         }
         if(n_count==1){
         PORTAbits.RA2 = 0;
         PORTAbits.RA0 = 0;
         PORTAbits.RA1 = 1;
         data_submit(digits[R2]);
         }    
         if(n_count==2){
         PORTAbits.RA0 = 0;
         PORTAbits.RA1 = 0;
         PORTAbits.RA2 = 1;
         data_submit(digits[R1]);
         }
      n_count++;
      if(n_count>2) n_count=0;
     }

я действительно вначале  не понял ,но щас попробую как у Вас,макетная плата собрана .

мне почему то показалась что ключевая функция в этом 

volatile struct flag_type {
unsigned ON      : 1;
unsigned                 : 1;
unsigned                 : 1;
unsigned                 : 1;
unsigned                 : 1;
unsigned                 : 1;
unsigned                 : 1;
unsigned                 : 1;
} flag;

кинулся изучать.  Спасибо Вам все уроки изучаю-)))

 

void convert (void){
    for (j=0;j<1000;j++){
    ledprint(j);
    __delay_ms(400);
    }
};

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

new 1.c

 

Ссылка на комментарий
Поделиться на другие сайты

14 часа назад, Wawchuk сказал:

поборюсь с засветкой сегментов.

ну вы опять делаете одну и туже ошибку,  посмотрите внимательно пример

в прерывании сначала тушим индикаторы (это вы слелали)

по кейсу сначала загружаем значения сегментов, потом включаем индикаторы(у вас все на оборот)

Ссылка на комментарий
Поделиться на другие сайты

ну я так именно и представлял сначала тушим ,а затем подгружаю, щас попробую изменю

 

нет слов ,одни эмоции ,цифры чистенькие без всякой засветки и без всяких ключей

          case 1:
            dig2=0;  
            dig3=0;
            data_submit(digits[R1]);
            dig1=1;

Ссылка на комментарий
Поделиться на другие сайты

и еще 

        PORTA=000000;
        dig1=0;dig2=0;dig3=0;

масло масленое 

1. и первая, и вторая строки  делают одно и тоже: тушат индикаторы

2 использовать вторую строку в таком виде нельзя из-за ЧМЗ,  посмотрите как сделано , команды разделены нопами

dig1=0; NOP(); dig2=0;NOP(); dig3=0; NOP(); dig4=0;

3 далее в кейсе гасить индикаторы

          case 1:
            dig2=0;  
            dig3=0;  
            dig1=1;

не нужно, они и так уже выключены , достаточно только включить нужный

          case 1:
            data_submit(digits[R1]);
            dig1=1; 
Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, Wawchuk сказал:

И счет идет, но только до 256 и опять начинает с нуля:

в функции

void convert (void){
    for (j=0;j<1000;j++){
    ledprint(j);
    __delay_ms(10);
    }
}

j описана как беззнаковое 8ми битное , цикл for(;;) превратился в вечный цикл.

 

Ссылка на комментарий
Поделиться на другие сайты

Да, это я разобрался понял вчера исправил unsigned char было, щас считает нормально до 999

void convert (void){

      for (unsigned int j=0;j<1000;j++){

      ledprint(j); __delay_ms(10);

      }

}

 

если просто int j выдает warning

 

Ссылка на комментарий
Поделиться на другие сайты

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

Arduino: 1.6.7 (Windows 7), Плата:"Arduino Pro or Pro Mini, ATmega328 (3.3V, 8 MHz)"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware "C:\Program Files (x86)\Arduino\hardware" -tools "C:\Program Files (x86)\Arduino\tools-builder" -tools "C:\Program Files (x86)\Arduino\hardware\tools\avr" -built-in-libraries "C:\Program Files (x86)\Arduino\libraries" -libraries "C:\Users\Дмитррий\Documents\Arduino\libraries" -fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10607 -build-path "C:\Users\73C0~1\AppData\Local\Temp\buildefa042944d8dfe1f5f50c4f3ca411f0c.tmp" -warnings=default -prefs=build.warn_data_percentage=75 -verbose "C:\Users\Дмитррий\Documents\Arduino\libraries\SPFD5408_TFT_Library\examples\graphicstest\graphicstest.pde"
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware "C:\Program Files (x86)\Arduino\hardware" -tools "C:\Program Files (x86)\Arduino\tools-builder" -tools "C:\Program Files (x86)\Arduino\hardware\tools\avr" -built-in-libraries "C:\Program Files (x86)\Arduino\libraries" -libraries "C:\Users\Дмитррий\Documents\Arduino\libraries" -fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10607 -build-path "C:\Users\73C0~1\AppData\Local\Temp\buildefa042944d8dfe1f5f50c4f3ca411f0c.tmp" -warnings=default -prefs=build.warn_data_percentage=75 -verbose "C:\Users\Дмитррий\Documents\Arduino\libraries\SPFD5408_TFT_Library\examples\graphicstest\graphicstest.pde"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10607 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\73C0~1\AppData\Local\Temp\buildefa042944d8dfe1f5f50c4f3ca411f0c.tmp\sketch\graphicstest.pde.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10607 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\73C0~1\AppData\Local\Temp\buildefa042944d8dfe1f5f50c4f3ca411f0c.tmp\sketch\graphicstest.pde.cpp" -o "C:\Users\73C0~1\AppData\Local\Temp\buildefa042944d8dfe1f5f50c4f3ca411f0c.tmp\preproc\ctags_target_for_gcc_minus_e.cpp"
C:\Users\Дмитррий\Documents\Arduino\libraries\SPFD5408_TFT_Library\examples\graphicstest\graphicstest.pde:5:54: fatal error: Adafruit_GFX.h: No such file or directory

compilation terminated.

exit status 1
Ошибка компиляции.

Ссылка на комментарий
Поделиться на другие сайты

У тебя в последней строчке

19 минут назад, Дмитрий Мамедиев сказал:

C:\Users\Дмитррий

 поэтому 

19 минут назад, Дмитрий Мамедиев сказал:

No such file or directory

 

Ссылка на комментарий
Поделиться на другие сайты

Я догадывался но не пойму что это за ересь и как с ней бороться? Имя юзера на русском? Переименовать на инглиш?

Ссылка на комментарий
Поделиться на другие сайты

Я как-то пробовал так делать, переименовать ты можешь только отображаемое имя пользователя, а имя папки пользователя задаётся только один раз при его создании. Проще переместить библиотеку в место где путь к ней будет нормальными буквами.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

В 02.11.2018 в 17:30, Дмитрий Мамедиев сказал:

C:\Users\Дмитррий\

вечная проблема забугорного софта и русского имени пользователя в винде.

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

корень проблемы в разработчиках, у которых за основу принят английский язык и ради небольшой русскоязычной аудитории добавлять поддержку директорий на кириллице (которой по дефолту нет во многих платформах) им просто лень.

Ссылка на комментарий
Поделиться на другие сайты

Переименовать тоже не получится, только если пересоздать. Меняется только отображаемое имя пользователя, а пути остаются прежними - ведь они могут оказаться прописанными в миллионе разных мест. Даром, что для обозначения папки пользователя надо использовать специальные алиасы... и никаких проблем с путями с русскими буквами. Кроме того, в файле где-то выше аналогичный путь прописался верно.

Вообще говоря, не только рускоязычные страдают. Все страдают, кроме англоговорящих. На немецком можно написать так что будет не менее плохо - у них есть ещё всякие надсимвольные значки...

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Продолжая начатое

pic16f676 подключен также 3-мя проводками к 74hc595 (1-на выводах сегменты с общим анодом) и от него стандартно к второй 74hc595(2-на ней 8 разрядов).Все как рассматривалось выше ,только плюс еще одна 74hc595.

понимаю ,что для динамической индикации необходимо вставить в прерывание включение разрядов (единицей),но не получается пока ,пробовал погуглить, 

 

main.c

 

Ссылка на комментарий
Поделиться на другие сайты

38 минут назад, Wawchuk сказал:

пробовал погуглить

тут каждый решает сам как передавать данные. обычно оформляется отдельной функцией.

  решение в лоб для 9ти регисторв(долгое и медленное)

Скрытый текст

//******************************************
//* запись в регистры 74HC595
//******************************************

void read_74HC595 (unsigned char reg8,unsigned char reg7,
                   unsigned char reg6,unsigned char reg5,
                   unsigned char reg4,unsigned char reg3,
                   unsigned char reg2,unsigned char reg1,
                   unsigned char reg0)
{unsigned char i;
 
 
   for(i=0;i<8;i++)
     {
      if(reg8&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg8 = reg8<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg7&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg7 = reg7<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg6&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg6 = reg6<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg5&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg5 = reg5<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg4&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg4 = reg4<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg3&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg3 = reg3<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg2&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg2 = reg2<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
   for(i=0;i<8;i++)
     {
      if(reg1&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg1 = reg1<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
     reg0 = 1<<reg0;
   for(i=0;i<8;i++)
     {
      if(reg0&(1<<7)) {PIN_DS = 1;} else {PIN_DS = 0;}
      reg0 = reg0<<1;
      PIN_SH = 1;
      NOP();
      PIN_SH = 0; 
      PIN_DS = 0;
     }
      PIN_ST = 1;
      NOP();
      PIN_ST = 0;      


}
//***********************************

 

 

Ссылка на комментарий
Поделиться на другие сайты

 Вот так правильно:

for (i=0;i<16;i++)  //
     {
      if(i<=7){
          DATA_595=(reg2 >> i) & 0x01; //
          clock();
//         
          }
       if(i>7){
          DATA_595=(reg1 >> i) & 0x01; //
          clock();
 
          }
     }
strobe(); //
 };

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Релюхи не причём. При неисправности релюх симптомы были бы другие. И ИБП даже не клацает когда переходит в  "аварию".   Да. Аккум новый. Более того - 2 новых пробовал. И без АКБ тоже. Не влияет. Да мелкие особо не вздуваются ж. Хотя С21 под подозрением..   Спасибо. Буду иметь ввиду.
    • #include <Wire.h> #include <Oregon_TM.h> #include <BME280I2C.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N //Принципиальная схема прилагается. //Для работы необходима библиотека https://github.com/finitespace/BME280/ //Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи) //Пример с приёмником поддерживает расшифоовку THP //////////////////////////////////////////////////////////////////////////////////////////////////////////// # define THGN_SEND 1 // Передавать ли данные в формате THGN132 # define THP_SEND 0 // Передавать ли данные в формате THP # define DEVICE_LOG 1 //Писать ли лог В Serial # define DONE_PIN 15 // вывод сигнала об окончании работы на таймер # define BME_WAIT 10 // Сколько мс ожидать датчик BME # define BATTERY_THR 3.5 // Порог напряжения для выставляения флага разряда батарейки (THGN) ///////////////////////////////////////////////////////////////////////////////////////////////// //Ниблы датчика THP //Во всех полях младшие ниблы идут вперёд!!! // 1-2 - тип (55) // 3 - канал (0-7) // 4-6 - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h // 7-9 - Влажность *10 Т.е. 25.1% = 251 = 0FBh // 10-12 - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah // 13-15 - данные с АЦП (A0) // 16-17 - CheckSUM // 18-19 - CRC8 (poly 0x07 start 0x00) ///////////////////////////////////////////////////////////////////////////////////////////////// Oregon_TM transmitter(4); BME280I2C bme; bool bme_present = false; float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN); ///////////////////////////////////////////////////////////////////////////////////////////////// void setup() { digitalWrite(DONE_PIN, LOW); pinMode(DONE_PIN, OUTPUT); #ifdef DEVICE_LOG Serial.begin(115200); Serial.println("Waiting for BMEsensor..."); #endif //Обмен данными с BME////////////////////////////////// Wire.begin(); while(!bme.begin()) { if (millis() > BME_WAIT) break; } if (!bme.begin()) { #ifdef DEVICE_LOG Serial.println("No BME sensor found"); #endif bme_present = false; } else { switch(bme.chipModel()) { case BME280::ChipModel_BME280: bme_present = true; bme.read(bme_pres, bme_temp, bme_hum); #ifdef DEVICE_LOG Serial.println("Found BME280 sensor! Success."); Serial.print("Temperature = "); Serial.print(bme_temp, 1); Serial.println("C"); Serial.print("Humidity = "); Serial.print(bme_hum, 1); Serial.println("%"); Serial.print("Pressure = "); Serial.print(bme_pres * 0.75, 1); Serial.println("mmHg"); #endif break; default: #ifdef DEVICE_LOG Serial.println("Found UNKNOWN sensor! Error!"); #endif bme_present = false; } } //Напряжения батареи/////////////////////////////////////////// word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100); #ifdef DEVICE_LOG Serial.print("Battery voltage = "); Serial.println(battvotage,HEX); #endif //Подготовка и отправка данных THGN////////////////////////////////////// transmitter.protocol == 2; if (THGN_SEND) { transmitter.setType(THGN132); transmitter.setChannel(3); transmitter.setBatteryFlag(battvotage < BATTERY_THR); if (bme_present) { if (bme_hum > 98) bme_hum = 98; if (bme_hum < 2) bme_hum = 2; if (bme_temp > 70) bme_temp = 70; if (bme_temp < -50) bme_temp = -50; transmitter.setTemperature(bme_temp); transmitter.setHumidity(bme_hum); transmitter.setComfort(bme_temp, bme_hum); } else { transmitter.setTemperature(-49.9); transmitter.setHumidity(2); transmitter.setComfort(-49.9, 2); } transmitter.SendPacket(); } // Если отправляются оба формата пакетов, межу ними надо выдержать паузу if (THP_SEND && THGN_SEND) delay(100); //Подготовка и отправка данных THP////////////////////////////////////// if (THP_SEND) { transmitter.setType(THP); transmitter.setChannelTHP(1); transmitter.setBatteryTHP( battvotage); if (bme_present) { transmitter.setTemperatureTHP(bme_temp); transmitter.setHumidityTHP(bme_hum); transmitter.setPressureTHP(bme_pres * 0.75); // перевод Pa в mmHg } else { transmitter.setErrorTHP(); } transmitter.SendPacket(); } #ifdef DEVICE_LOG Serial.println(); Serial.print(millis()); Serial.println("ms"); Serial.println(); #endif //Команда на отключение питания digitalWrite(DONE_PIN, HIGH); } ///////////////////////////////////////////////////////////////////////////////////////////////// void loop(){} ///////////////////////////////////////////////////////////////////////////////////////////////// int Vbg() { ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0); long buffersamp=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA = 0xc7; while (bit_is_set(ADCSRA,ADSC)); buffersamp += ADC; } buffersamp >>=4; //16368 full scale 14bit ADCSRA &= ~(1 << ADEN); // отключаем АЦП return buffersamp; } Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.
    • На фото может быть название , характеристики и т.д. И по этому фото я смогу выбрать такой же в инете.. самому мне не собрать..
    • А что даст фотка? Тот же щуп, только чуть крупнее и с проводами питания.
    • Для меня наверное лучше купить готовый.. цель повысить чувствительность до 1 mV.. Наверное на Авто стоит покупать , мне бы фотку какую нить..такого активного щупа..))
    • Так на схемах обозначается подключение к сети 220 В.
×
×
  • Создать...