artos5

Moderators
  • Публикации

    2 616
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    7

Последний раз artos5 выиграл 22 января 2013

Публикации artos5 были самыми популярными!

Репутация

285 Хороший

О artos5

  • Звание
    начинающий :)
  • День рождения 05.05.1985

Контакты

  • ICQ
    436015834
  • Skype
    artyomugr

Информация

  • Пол
    Мужчина
  • Город
    Украина, Ахтырка

Электроника

  • Стаж в электронике
    10-20 лет
  • Сфера радиоэлектроники
    Цифровая электроника, Силовая электроника, Аудио
  • Оборудование
    UNI-T UT71B, MASTECH MS8260E , LUKEY 852D, Паяльник 30W с тонким керамическим жалом, держатель плат с лупой.

Посетители профиля

21 120 просмотров профиля
  1. HX711 + Тензо 50кг. + ATmega328

    Проблема была в типах данных . Но датчик все равно "странноватый" немного
  2. HX711 + Тензо 50кг. + ATmega328

    Всем привет! Изучаю плотно сейчас данный АЦП. Проблема возникла следующая: При использовании датчика на 150кг. весы в принципе работали и взвешивали хорошо. Захотелось попробовать применить датчик на 50кг. появились проблемы . Для визуального просмотра значения АЦП прописал функцию принтф , и просто бросаю информацию в терминал , код след: printf("DATA=%3.2f\r\n ADC_VALUE=%d, %X \r\n", data_buff/data_cal , Weighing(3) , Weighing(3)); код опроса АЦП такой: signed long int Weighing(char mode) // mode = 1 or 2 or 3 { char i = 0; adc_value = 0; HX_PORT &= ~(1<<sck); while((HX_PIN & (1<<data))); for(i=0; i<24; i++) { HX_PORT |= (1<<sck); adc_value <<= 1; HX_PORT &= ~(1<<sck); if(HX_PIN & (1<<data)) { adc_value++; } } for(i=0; i<mode; i++) { HX_PORT |= (1<<sck); HX_PORT &= ~(1<<sck); } return adc_value; } Когда груза нет - показывает: -6700 Когда ложу на датчик 200гр. груз - показывает 10800 (+-150) Когда ложу груз 500гр. - -28000 (+-150) Что это за ерунда такая? вывожу в терминал то что прочитал с функции Weighing . Функция вроде правильная , и была взята с просторов интернета . Я ее немного доработал (добавил настройку усиления и выбор входа) . Пробовал разное усиление канала А - результат одинаковый , цифры только разные. Датчик у меня 2мв./В
  3. Кто работал с памятью M95080? Не пишет весь массив

    Короче , опять каламбур... Запись нормально работает , а вот с чтением памяти какие то проблемы...... Есть у кого то побайтовый кусок , как прочитать из памяти данные? Из даташита нихрена не работает , либо работает крайне нестабильно . Заметил что четко считывает , если читать один и тот же кусок два раза . На второй раз нормально считывается... Читаю вот так: void flash_mas_read( uint16_t y, uint16_t addr, uint8_t s) { SPI_WP_SET; HAL_Delay(50); uint16_t z=0, x=0; read_cmd_M95080(); soft_spi_write_addr(addr); // двух байтовый адрес: 0 ... 1024 HAL_Delay(1); for(x=0; x<y; x++) // читаем данные { buff_text[x] = soft_spi_read(); // читаем весь массив } SPI_CS_SET; HAL_Delay(8); SPI_WP_CLR; }
  4. Кто работал с памятью M95080? Не пишет весь массив

    В коде неправильно было обращение к ячейкам массива ,и неправильно указывался адрес страницы . Вот это решило проблему: addr/=32;
  5. Кто работал с памятью M95080? Не пишет весь массив

    Нашел косяк ))) исправил , и все завелось! проблема была в функции записи, вот так надо: void flash_write_arr(char *data, uint16_t size, uint16_t addr) { uint32_t x=0, y=0; data+=0; addr/=32; for(y=addr; y<(addr+size/32); y++) // page { write_enable_M95080(); write_status_reg_M95080(); while((read_status_M95080()&0x00)!=0x00); SPI_CS_SET; soft_spi_write_instruct(SPI_FLASH_INS_PAGE_PROGRAM); soft_spi_write_addr(y*32); for(x=y*32; x<(y*32+32); x++) { soft_spi_write_instruct(data[x-addr*32]); } SPI_CS_SET; HAL_Delay(70); } } И добавил включение разрешение на запись в функции чтения массива (думаю не помешает): void flash_mas_read( uint16_t y, uint16_t addr, uint8_t s) { uint16_t z=0, x=0; write_enable_M95080(); write_status_reg_M95080(); while((read_status_M95080()&0x00)!=0x00); read_cmd_M95080(); soft_spi_write_addr(addr); HAL_Delay(1); for(x=0; x<y; x++) // читаем данные { if(s==0)buff_text1[x] = soft_spi_read(); else buff_text2[x] = soft_spi_read(); HAL_Delay(8); } SPI_CS_SET; HAL_Delay(8); }
  6. Кто работал с памятью M95080? Не пишет весь массив

    Всем привет! Ребятки , кто юзал эту память , или похожую - подскажите! Что не так в функциях: чтение: void flash_mas_read( uint16_t y, uint16_t addr, uint8_t s) { uint16_t z=0, x=0; read_cmd_M95080(); soft_spi_write_addr(addr); HAL_Delay(1); for(x=0; x<y; x++) // читаем данные { if(s==0)buff_text1[x] = soft_spi_read(); else buff_text2[x] = soft_spi_read(); if(s==0) sprintf( tx_buffer0 ,"%c", buff_text1[x]); else sprintf( tx_buffer0 ,"%c", buff_text2[x]); send_str_uart1(tx_buffer0); } SPI_CS_SET; HAL_Delay(8); } запись: void flash_write_arr(char *data, uint16_t size, uint16_t addr) { uint16_t x=0, y=0; data+=0; for(y=addr; y<=addr+size/32; y++) // page { write_status_reg_M95080(); write_enable_M95080(); while((read_status_M95080()&0x00)!=0x00); SPI_CS_SET; soft_spi_write_instruct(SPI_FLASH_INS_PAGE_PROGRAM); soft_spi_write_addr(y*32); for(x=y*32; x<(y*32+32); x++) { soft_spi_write_instruct(data[x-addr*32]); } SPI_CS_SET; HAL_Delay(70); } } Проблема такая: если пишу по 0 адресу - то все ок пишет и читает , а вот если пишу уже по адресу 256 (десятичная система) - то не пишет корректно , или вообще не пишет ... Что я мог упустить в коде?
  7. Кто работал с памятью M95080? Не пишет весь массив

    Посмотрел в исходник , примерно так и сделал. А по даташиту понял что нужно 0х02 писать ... Попробовал 0х00 - тоже работает
  8. Кто работал с памятью M95080? Не пишет весь массив

    Из даташита понял что регистр статуса должен быть 0х02 , потом увидел из дш. что в статус регистр можно записывать. Но ни где не указано в дш. что нужно в этот регистр записать 0х02 потом только писать данные! Дурацкое описание в индусов Вот в микрочипа отличный дш. У них похожая память на эту - 25С080. Пришлось и его дш. читать. В результате , утром при помощи перебора (я и знал что статус должен быть 0х02, но без записи статус регистра он сам таким не станет ) получилось записать весь массив , и прочитать его . Сейчас пишет и читает корректно , как страницу так и весь массив. Если кому надо будет, могу дать библиотеку к этой памяти. Она для любого мк. Но сейчас я использую с STM32F103 в 48 пиновом корпусе.
  9. Кто работал с памятью M95080? Не пишет весь массив

    В общем победил я проблему с записью и чтением ! Нужно было делать так: Отправить команду разрешить запись Отправить команду записать в статус регистр Отправить данные 0х02 Потом прочитать статус регистр , отправив команду чтения статус регистра должен быть код 0х02. И внимание! Прочитать нужно 16 бит! Потом только записать 32 байта!
  10. Кто работал с памятью M95080? Не пишет весь массив

    Буду Вам весьма признателен за информацию! А то стопарнулся на записи еепром ... Кстати затык с чтением еепром скорее всего связан с переходом памяти в спящий режим . С первым чтением память пробуждается , со второго чтения уже считывается массив Проверю скоро эту теорию dosikus, программный спи юзаю так как ноги не совпадают (на плате разводка под разные памяти 24Схх и под М95080) , программный спи работает тоже норм.
  11. Кто работал с памятью M95080? Не пишет весь массив

    Вот код чтения статус регистра: if(string_cmp("EERST>", rx_buffer0)) { send_str_uart1("STATUS_READ: >\r\n"); int id=0; for(x=0;x<1000;x++) { SPI_CS_CLR; soft_spi_write_instruct(SPI_FLASH_INS_READ_STATUS_REGISTER); HAL_Delay(1); id = soft_spi_read(); sprintf(tx_buffer0 , "%2X " , id); send_str_uart1(tx_buffer0); SPI_CS_SET; HAL_Delay(5); } send_str_uart1("\r\n END\r\n"); clear_buffer_rx(); flg=0; } Дык это вроде только для флешки актуально ?? Для еепрома вроде не нужно?
  12. Кто работал с памятью M95080? Не пишет весь массив

    ID походу у М95080 нету. а вот статус 1000 раз прочитал, и получил следующее: Считаю что SPI работает корректно !
  13. Кто работал с памятью M95080? Не пишет весь массив

    Я раньше когда пользовался кокосом , настраивал регистры в ручную. Вроде особых проблем не было. Тут проблема не в этом . Проблема в последовательности подачи команд и данных для записи страницы / всего массива , и какое значение должно быть статус регистра перед записью. Через пол часика попробую ))) Результаты продемонстрирую ! И еще: Вам не трудно будет подсказать значение статус регистра перед записью? Вот даташит на память эту: http://www.st.com/content/ccc/resource/technical/document/datasheet/28/42/21/c1/13/bf/47/9a/DM00043274.pdf/files/DM00043274.pdf/jcr:content/translations/en.DM00043274.pdf
  14. Кто работал с памятью M95080? Не пишет весь массив

    Я юзаю программный SPI.
  15. Кто работал с памятью M95080? Не пишет весь массив

    Скажите пожалуйста , какое нормальное значение должно быть статус регистра перед записью и чтением? Думаю дело во всяких WRITE PROTECT и т.д.