4 сообщения в этой теме

Дуч    0

Здравствуйте.

Есть два программатора Pickit3. Один из них китайский клон, другой оригинал от Microchip.

Китаец стирает калибровочную константу Pic12f629, а оригинал прошивает и проблем нет. Подскажите причину стирания константы?

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Дуч    0

#pragma config FOSC =  INTRCIO      // INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
#pragma config WDTE =  ON           // WDT enabled
#pragma config PWRTE = ON           // PWRT enabled
#pragma config MCLRE = ON          // MCLR/VPP pin function is digital input - причина оказалось в этом. Было OFF (шилось с бубном и стиралась константа)
#pragma config CP =    ON           // Program memory code protection is enabled
#pragma config CPD =   ON           // Data memory code protection is enabled
#pragma config BOREN = ON           // Brown-out Reset enabled Сброс по понижению питания включен

Расскажите умные люди почему? я не пойму 

Изменено пользователем Дуч

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2jas    14

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4uvak    111

Попробуй нормальную универсальную программу, которая и со вторым и с третьим пиккитом работает. У меня клон  отлично работает с этой прогой. Возможно придется пиккит3 перепрошить. Для этого открой меню Tools, и нажми на пункт Download PICkit Operating System, и выбери тот hex файл из папки пиккит3, который виден. Программатор перепрошьется сам через усб

PICkit3.rar

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: SDD39
      Изучая пару месяцев язык программирования Си  , решил попробовать написать данную программу для закрепления и углубления знаний.
      В чём её суть.  Ну к примеру нам надо спаять мост Винна. Для него , как известно нужны пары деталей конденсаторов и резисторов с желательно близкими значениями. Особенно трудно обычно подобрать конденсаторы но не в этом сейчас суть.  Так вот , пускай у нас есть несколько десятков  конденсаторов  и мы можем соединив параллельно по два конденсатора получить нужный номинал . Но при этом имеется вероятность , что подобрав пары  должным образом , мы можем получить весьма низкое отклонение  подобранных  пар , соединённых последовательно или параллельно.  Так вот , если к примеру у нас имеется 31 промеренный конденсатор (что я сделал и занеёс в таблицу для МБМ конденсаторов 0.1 мкФ , чтобы иметь практические данные это не так уж долго и вполне осуществимо на практике)  , то количество только возможных не повторяющихся  комбинаций будет составлять (31*31 - 31)/2= 465 . Просчитать  такое  количество  в ручную , отсеить невозможные комбинации где один и тот же конденсатор присутствует более одного раза , да ещё выбрать наилучший вариант задача компьютера , а не человека.   И он справляется с ней  за секунду.
      По скольку в программировании я не очень силён то какой то графической оболочки у меня нет (я вообще пока не знаю как это делается). Так же не придумал способа ввода данных в программу. Наверно надо будет попробовать как то делать это из текстового файла. Результаты программа уже выводит на экран и создаёт текстовый файл Rezalts.txt с результатами вычислений. Хотелось бы что бы опытные программисты взглянули на мой труд и указали на недочеты , ошибки и возможные решения в лучшем направлении. В общем буду благодарен за незлобные указания моих ошибок . Прилагаю исходник на Си и сопутствующие файлы данных и результатов в архиве . А так же скриншот результатов вывода на экран.
       
       
       
       
         
       
       
       
       
        
       

      Rezalts.rar
    • Автор: ximik_se
      Всем привет.

      Решил сделать небольшую домашнюю метеостанцию.

      Есть приемник с экраном, куда выводится инфа (построено на ATMEGA 328P) и есть передатчик, который посылает инфу по возудху (построено на ATtiny85).

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

      При этом время между измерениями не меньше 20 сек.

      В общем заказал я себе с Китаюшки более точные датчики - 

      CJMCU-1080 HDC1080
      Вещица прекрасная, но общается по I2C.

      А библиотеку рабочую под нее я смог найти только одну "ClosedCube_HDC1080.h" и никаких модификаций под ATtiny я найти не смог.

      Для ее работы соответственно нужен Wire.h

      В общем решил я его поковырять самостоятельно, хоть и не прогер. Забрался во внутренности ClosedCube_HDC1080.cpp и везде заменил Wire на TinyWireM (некий аналог Wire для ATtiny).

      И у меня даже получилось считывать валжность, но вот вместо температуры приходит гадость. Ибо при компиляции Arduino IDE ругалась на строку (я ее ниже в коде закомментировал)
      uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } Ошибку пишет следующую:

      \ClosedCube_HDC1080.cpp: In member function 'void ClosedCube_HDC1080::heatUp(uint8_t)':

      \ClosedCube_HDC1080.cpp:81:13: error: 'class USI_TWI' has no member named 'readBytes'

      TinyWireM.readBytes(buf, (size_t)4);
      Может есть ребята более понимающие в коде и сумеющие победить эту проблему, чтобы и температуру этот датчик смог передавать через ATtiny85.

      Вот полный текст файла ClosedCube_HDC1080.cpp (уже замененный ну и строчка закоментирована):
      #include <TinyWireM.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080::ClosedCube_HDC1080() { } void ClosedCube_HDC1080::begin(uint8_t address) { _address = address; TinyWireM.begin(); // Heater off, 14 bit Temperature and Humidity Measurement Resolution TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(0x0); TinyWireM.write(0x0); TinyWireM.endTransmission(); } HDC1080_Registers ClosedCube_HDC1080::readRegister() { HDC1080_Registers reg; reg.rawData = (readData(CONFIGURATION) >> 8); return reg; } void ClosedCube_HDC1080::writeRegister(HDC1080_Registers reg) { TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(reg.rawData); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(10); } void ClosedCube_HDC1080::heatUp(uint8_t seconds) { HDC1080_Registers reg = readRegister(); reg.Heater = 1; reg.ModeOfAcquisition = 1; writeRegister(reg); uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } reg.Heater = 0; reg.ModeOfAcquisition = 0; writeRegister(reg); } float ClosedCube_HDC1080::readT() { return readTemperature(); } float ClosedCube_HDC1080::readTemperature() { uint16_t rawT = readData(TEMPERATURE); return (rawT / pow(2, 16)) * 165 - 40; } float ClosedCube_HDC1080::readH() { return readHumidity(); } float ClosedCube_HDC1080::readHumidity() { uint16_t rawH = readData(HUMIDITY); return (rawH / pow(2, 16)) * 100; } uint16_t ClosedCube_HDC1080::readManufacturerId() { return readData(MANUFACTURER_ID); } uint16_t ClosedCube_HDC1080::readDeviceId() { return readData(DEVICE_ID); } uint16_t ClosedCube_HDC1080::readData(uint8_t pointer) { TinyWireM.beginTransmission(_address); TinyWireM.write(pointer); TinyWireM.endTransmission(); delay(9); TinyWireM.requestFrom(_address, (uint8_t)2); byte msb = TinyWireM.read(); byte lsb = TinyWireM.read(); return msb << 8 | lsb; }  
    • Автор: 55nlo
      Написать программу Асм атмега 1284.
      Фрагмент: после команды считать рабочий регистр (в котором может появиться число от 1 до 50) каждому числу  соответствует 4 значения  (это таблица) их нужно загрузить в четыре рабочих регистра для дальнейшей обработки)
       Где лучше хранить таблицу?
      Пример: считали 48  числа 5; 8; 21; 25
                      Считали 31 числа 4;  9; 11; 35
       
    • Автор: mandruk1331
       
      Я новичок в программировании PIC. Я создал тестовую программу, чтобы проверить, все ли работает нормально, но светодиод не мигает. Программатор: Pickit3. Микроконтроллер: PIC16F628A
      Возможно, я что-то неправильно делаю в разделе кода:
      #include <stdio.h> #include <stdlib.h> #include <pic16f628a.h> void delay_ms(int); int main() { TRISA2 = 0; //RB0 as Output PIN while(1) { RA2 = 0xFF; delay_ms(1000); RA2 = 0x00; delay_ms(1000); } return 0; } //General short delay void delay_ms(int x) { int y, z; for ( ; x > 0 ; x--) for ( y = 0 ; y < 4 ; y++) for ( z = 0 ; z < 176 ; z++); }  

    • Автор: VisualNT
      Доброго времени суток!
      Может кто-нибудь объяснить, в чём смысл и преимущества использования специализированных программаторов для STM32 типа ST-Link и клонов, работающих по интерфейсам SWD/JTAG, если записать флеш можно прямо по UART/ISP или быстрее по USB (при его наличии)?
      Я так понимаю, что программаторы, кроме записи в память, ещё умеют выполнять отладку - и это их единственное отличие.
      А если отладка не нужна? Вернее, часто ли она используется при написании каких-нибудь маленьких прикладных программ типа реле времени? Я собираюсь развести свою печатную плату для STM32F107, а потом хочется поэкспериментировать с STM32F407ZGT - в них в обоих есть USB интерфейс, они оба есть в списке поддерживаемых USB DFU (согласно AN 3156). Но на форуме я прочитал, что пока все сидят на дискавери, в основном из-за того, что в ней есть встроенный программатор ST-LINK прямо на плате, но почему его наличие так важно и не заменяется возможностью программирования по UART/ISP или по USB? Есть ли какое-либо отличие кроме возможности отладки? Может быть, как и в случае со фьюзами у AVR, у STM32 есть какие-то функции/настройки, которые можно использовать/изменять только программатором ST-LINK?
      И да, разве скорость программирования по USB будет существенно ниже, чем по тому же JTAG или SWD?
      Заранее спасибо за ответы! Заранее предупрежу, чот с микроконтроллерами я раньше работал, но вот от ST что-то более-менее делал только на STM32F030...