Например TDA7294

Форум РадиоКот • Просмотр темы - Мигать светодиодом. ARM или не-ARM?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 08:25:30

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3623 ]     ... , , , 144, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Ср май 09, 2018 07:31:21 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 18
Зарегистрирован: Пн фев 05, 2018 18:03:00
Сообщений: 196
Рейтинг сообщения: 0
з.ы. в Виндовсе тоже можно собрать - создал простенький cmd файлик:
Код:
c:\SysGCC\arm-eabi\bin\arm-eabi-as -o bootstrap.o bootstrap.s
c:\SysGCC\arm-eabi\bin\arm-eabi-ld -o main.elf -T stm32f103.ld bootstrap.o
c:\SysGCC\arm-eabi\bin\arm-eabi-objcopy main.elf main.bin -O binary
pause

использовал toolchain ARM от SysProgs:
http://gnutoolchains.com/download/

Я как-то так с STM32 и дружусь, а меня dosikus за это полил что я дескать не использую какие там еще дебагеры, и вообще проприетарных тулсов делающих неизвестно что и за кучу денег не понакупил. Только я make-файл сделал, с несколькими targets: make clean - стирает хлам, make firmware - билдит прошивку, make flash - шьет через STшный бут. Если прошивки нет - make flash ее сперва сбилдует. А .s файлов у меня нет - все на си. В случае cortex M3 после power up нет системных действий, которые бы реально ассемблер потребовали. Таблицу векторов можно оформить и заполнить на си, обработчик reset - тоже на си. Как максимум немного asm может захотеться для включения-выключения прерываний, но помигать светодиодом можно и без этого.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Ср май 09, 2018 08:19:35 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Тыкните пожалуйста в косяк

может "#define Arduino_UNO" в файлик config.h перенести:
Код:
#ifndef CONFIG_H
   #define CONFIG_H

  #define F_CPU 16000000UL   //CPU frequency for all 8-bit arduino
  #define Arduino_UNO
...

А .s файлов у меня нет - все на си

дык там ассеблерный проект, состоящий из одного s файла и одной инструкции. Ассемблерные стартапы находятся в стандартной поставке CMSIS. Тот же SysProgs выпускает плагин VisualGDB, который создает ARMовые проекты с сишным стартапом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Ср май 09, 2018 08:33:43 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Как максимум немного asm может захотеться для включения-выключения прерываний, но помигать светодиодом можно и без этого.

Для таких простых вещей ассм не нужен, есть же готовые __enable_irq() и т.п....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Ср май 09, 2018 14:15:10 
Первый раз сказал Мяу!

Зарегистрирован: Вт дек 12, 2017 16:52:57
Сообщений: 31
Откуда: Вам широту и долготу скинуть?
Рейтинг сообщения: 0
Тыкните пожалуйста в косяк

может "#define Arduino_UNO" в файлик config.h перенести:
Код:
#ifndef CONFIG_H
   #define CONFIG_H

  #define F_CPU 16000000UL   //CPU frequency for all 8-bit arduino
  #define Arduino_UNO
...

Неее, тогда работоспособность библиотеки потеряется. Там работает так: Если задефайнино Arduino_UNO, то дефайним адреса портов. Если сразу задефайнить всё, то тогда потеряется переносимость библиотеки - она будет работать только с Arduino_Uno (точнее только с платами на atmega328P),а я хочу, чтобы работало со всеми 8-битными платами.

_________________

ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа, I love this.ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Ср май 09, 2018 15:32:08 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 178
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3378
Рейтинг сообщения: 0
Тогда #define Arduino_UNO должно быть перед #include "config.h".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пн май 14, 2018 07:56:45 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Если не зватает микроконтроллерных портов (например для подключения кучки мигающих светодиодов :) ) давно используют спец микросхемы расширетелей портов. Китайцы, например, используют PCF8574 для индикаторов 1602. Понадобилось тоже "расширить" порты для STM32 - добавить индикатор. I2C ноги заняты, но SPI свободен, SPI спец микросжемы-расширетели тоже есть, но вспомнил про 74HC595, есть кучка в наличии - как расширитель имхо пойдет. На всякий надо проверить (пока плата изготавливается) - паять макет лень, а Протеус в прошлой реинкарнации этой темы напрямую таким индикатором управлял. Попробуем Протеусом через регистр индикатором поуправлять.
Протеус 8.7 SP3 "научился" сам создавать Keil проекты для STM32 (без запуска среды Keil) - "видит" кейловский ARM компилятор, создает make файл, правда почти все прячет в дебрях файловой системы Виндовс, но найти можно. Для проверки пойдет.
Создаем проект для STM32F103C4. Используем аппаратный SPI, настраивается довольно просто. SPI тут 16-и битный - на шару подключаем второй 74HC595, можно еще 8 светодиодов или типа реле подключить. Для индикатора хватит 6 ног, оставшиеся от регистра 2 ноги используем для светодиодов - один из них, например, это включение подсветки индикатора.
проверочный говнокодик:
Спойлер
Код:
#include <stm32f103x6.h>
#include "lcd.h"

#define CS_LOW GPIOA->BSRR = GPIO_BSRR_BR0;
#define CS_HIGH GPIOA->BSRR = GPIO_BSRR_BS0;

uint8_t dataRele = 0;
uint8_t dataLCD = 0;

const char MENUTXT[2][20] =
{
   {"\x50\x61\x63\xC1\xB8\x70\x65\xBD\xB8\x65\x20\xBE\x6F\x70\xBF\x6F\xB3"}, // Расширение портов
   {"\xBE\x70\xB8\xB3\x65\xBF\x20\x50\x61\xE3\xB8\x6F\xBA\x6F\xBF\x20"}  // привет Радиокот
};

extern void SpiWriteData(uint16_t data);

void SpiInit(void)
{
    //включаем тактирование порта A и альтернативных функций
    RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN);

    //5(SCK) и 7(MOSI)- альтернативная функция  push pull, 4(CS) вывод вывод- выход, push-pull
    GPIOA->CRL &= ~(GPIO_CRL_CNF4_0 | GPIO_CRL_CNF5_0 | GPIO_CRL_CNF7_0);
    GPIOA->CRL |= GPIO_CRL_CNF5_1 | GPIO_CRL_CNF7_1;
    GPIOA->CRL |= GPIO_CRL_MODE0_1 | GPIO_CRL_MODE5_1 | GPIO_CRL_MODE7_1;

    //включаем тактирование SPI1
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;

    SPI1->CR1 |= SPI_CR1_BR;      //Baud rate = Fpclk/256
    SPI1->CR1 |= SPI_CR1_DFF;      //16 bit data
    SPI1->CR1 |= SPI_CR1_MSTR;      //Mode Master
    SPI1->CR1 |= SPI_CR1_SPE;      //Enable SPI`
}

void SpiWriteData(uint16_t data)
{
    //отправляем данные
    SPI1->DR = data;
    //ждём пока опустошится Tx буфер
    while (!(SPI1->SR & SPI_SR_TXE));
    CS_HIGH;
    CS_LOW;
}

int main(void)
{
    SpiInit();
    LCD_SetUp();
    LCD_Init(2, 20);
    LCD_Clear();
     dataRele = 0xAA; //
    dataLCD |= (1<<7) | (1<<6); // зажигаем LED1 LED2
    LCD_DisplayString(MENUTXT[0]);
   LCD_GoToLine(1);
    LCD_DisplayString(MENUTXT[1]);
    while (1)
    {
    }
}

результат:
Изображение


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 11:22:45 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Arduino представляет две новых платы IoT — MKR WiFi 1010 (ESP32) и MKR NB 1500 (NB-IoT + eMTC)
СпойлерИзображение

MKR WIFI 1010 — это усовершенствованная плата MKR1000, оснащенная модулем U-Blox ESP32.
Характеристики:
Спойлер* MCU — Microchip SAMD21 Cortex-M0 + MCU @ 48 МГц с 32 Кб SRAM, флэш-память 256 Кб
* Беспроводное подключение — 2,4 ГГц 802.11 b/g/n WiFi и Bluetooth 4.2 LE через U-blox модуль NINA-W10 Series на базе процессора ESP32.
* I/O
-- 8х цифровых вводов-выводов
-- 12x PWM контактов
-- 1x UART, 1x SPI, 1x I2C
-- 7x аналоговых входа на контакт
-- 1x аналоговый вывод на контакт
-- 8х внешних прерываниq
-- Рабочее напряжение — 3,3 В
-- Постоянный ток на контакт ввода/вывода — 7 мА
* USB — порт micro USB для питания и программирования
* Безопасность — устройство CryptoAuthentication ECC508
* Разное — RTC, светодиоды питания и заряда
* Источник питания
-- 5 В только через разъем USB или VIN
-- Li-Po, 3.7 В, 700 мАч минимум
* Размеры — 61,5 мм x 25 мм

Вторая плата является первой официальной платой Arduino, поддерживающей стандарты сотовой IoT стандарта NB-IoT или eMTC.
Характеристики:
Спойлер* MCU — Microchip SAMD21 Cortex-M0 + MCU @ 48 МГц с 32 Кб SRAM, флэш-память 256 Кб
* Беспроводное подключение — NB-Iot и LTE Cat M1 (eMTC) через модуль U-blox SARA-R410M, разъем Nano SIM-карты
* I / O
-- 22x цифровых ввода-вывода, включая 12x PWM контактов
-- 1x UART, 1x SPI, 1x I2C
-- 7x аналоговых входа на контакт
-- 1x аналоговых выхода на контакт
-- 8х внешних прерываний
-- 1x I2S
-- Рабочее напряжение — 3,3 В
-- Постоянный ток на контакт ввода/вывода — 7 мА
* USB — порт micro USB для питания и программирования
* Разное — RTC, светодиоды питания и заряда
* Источник питания
-- 5В только через разъем USB или VIN
-- Li-Po, 3.7В, 700 мАч минимум
* Размеры — 61,5 мм x 25 мм


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 13:16:54 
Собутыльник Кота
Аватар пользователя

Карма: -22
Рейтинг сообщений: -41
Зарегистрирован: Вс окт 02, 2016 07:34:45
Сообщений: 2976
Рейтинг сообщения: 0
Я правильно понял, что присутствующие на этой странице мигают светодиодом исключительно ради того, чтобы он мигал?
То есть если он, светодиод этот, вдруг замигает, то вы будете счастливы? А если не замигает, то соответственно впадете в депрессию?
Или на самом деле все гораздо круче - у кого замигал, тот папка, а у кого нет, тот чайник, лох, дно, чмо и т.д. и т.п. ?
Оранжевые штаны местного рОзлива? :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 14:30:05 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Давайте и я что ли помигаю. Естественно на плюсах под STM32, при помощи таймера и DMA, причем оформлю это все в виде универсального класса, который можно запрятать где-то очень глубоко и чтобы им воспользоваться нужно лишь передать нужный пин, таймер и канал DMA.

Сам шаблонный класс:
Спойлер
Код:
template<typename Pin, typename Tim, typename Dma>
class LedBlink
{
public:
   static void init(uint32_t delay)
   {
      Pin::init(PinMode::PushPull);

      Dma::enablePeriphClock();
      Dma::initMemToPeriph((void*)buf, DmaDataSize::_32, true, (void*)&Pin::base()->BSRR, DmaDataSize::_32, std::size(buf), DmaPrio::Low, true);

      Tim::enablePeriphClock();
      Tim::init(Tim::getFreq() / 1'000 - 1, delay - 1);
      Tim::template enableDmaRequest<TimDmaReq::Update>();

      Dma::enable();
      Tim::enable();
   }

private:
   static inline const uint32_t buf[] = { Pin::pinMask, Pin::pinMask << 16 };
};

Теперь мигаем двумя светодиодами с разной частотой:
Код:
LedBlink<PinB<1>, Timer1, Dma1Ch5> ledBlink1;
LedBlink<PinA<7>, Timer2, Dma1Ch2> ledBlink2;

int main()
{
   Periph::enableClock(AhbPeriph::GpioA | AhbPeriph::GpioB);

   ledBlink1.init(500);
   ledBlink2.init(250);

   while(true) {}
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 14:58:55 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 178
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3378
Рейтинг сообщения: 0
Reflector, это не весь код. :dont_know: Нужно было проект выложить со всеми зависимостями. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 15:24:13 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Reflector, очевидно же, с поправкой Мурика, код на "регистрах" будет понятней, более читаем , короче и эффективней . И никаких плюсов ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 15:45:14 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
код на "регистрах" будет понятней, более читаем , короче и эффективней

не, не очевидно)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 15:58:18 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Reflector, это не весь код. :dont_know: Нужно было проект выложить со всеми зависимостями. :)

Что еще нужно было сделать? :) Весь код есть только у меня и парочки моих товарищей, остальные могут оценить сам подход, хотя скомпилировать такой код все равно мало кто смог бы, для этого нужен gcc 7. Но я могу, опять же для примера, показать в упрощенном виде что находится внутри класса DMA:
Спойлер
Код:
template<uint32_t ch>
class DmaChannel
{
public:
    static constexpr auto dma() { return (DMA_TypeDef*)dmaBase; }
    static constexpr auto channel() { return (DMA_Channel_TypeDef*)ch; }

    static void initMemToPeriph(void* memoryAddr, DmaDataSize memSize, bool memoryInc, volatile void* periphAddr, DmaDataSize periphSize,
          uint16_t bufSize, DmaPrio prio = DmaPrio::VeryHigh, bool circular = false)
    {
        channel()->CPAR = uint32_t(periphAddr);
        channel()->CMAR = uint32_t(memoryAddr);
        channel()->CNDTR = bufSize;
        channel()->CCR = DMA_CCR_DIR | uint32_t(prio) | (uint32_t(periphSize) << 8) | (uint32_t(memSize) << 10) | (circular << 5) | (memoryInc << 7);
    }

    static void enable() { channel()->CCR |= DMA_CCR_EN; }

       .........
};

using Dma1Ch1 = DmaChannel<DMA1_Channel1_BASE>;
using Dma1Ch2 = DmaChannel<DMA1_Channel2_BASE>;
.........

Также можно сравнить разницу в генерируемом коде с чистыми регистрами. Если заменить эту строку
Код:
Dma::initMemToPeriph((void*)buf, DmaDataSize::_32, true, (void*)&Pin::base()->BSRR, DmaDataSize::_32, std::size(buf), DmaPrio::Low, true);

на ее содержимое
Код:
DMA1_Channel5->CPAR = uint32_t(buf);
DMA1_Channel5->CMAR = uint32_t(GPIOB->BSRR);
DMA1_Channel5->CNDTR = std::size(buf);
DMA1_Channel5->CCR = DMA_CCR_DIR | uint32_t(DmaPrio::Low) | (uint32_t(DmaDataSize::_32) << 8) | (uint32_t(DmaDataSize::_32) << 10) | DMA_CCR_PL_0 | DMA_CCR_MINC;

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 16:23:46 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 178
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3378
Рейтинг сообщения: 0
Reflector писал(а):
Что еще нужно было сделать?
Просто тогда нет смысла в выложенном коде. :dont_know: :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 17:29:32 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Мурик, да ну ? Ты не можешь читать писанину. Reflector'a?
Вот-те раз...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 17:45:34 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 178
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3378
Рейтинг сообщения: 0
Почему же, могу. Хотелось бы взглянуть на весь код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 19:22:46 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
мало кто смог бы, для этого нужен gcc 7

а то такая сложность достать gcc7, ага)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 19:43:14 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 4
Не удержался, в пиковой теме увидел - человеку надо типа термостат на PIC и DS18B20. Мигаем светодиодом с пользой. Потом может на ARM сделаю.
Создал проект XC8 прямо в Протеусе.
Велосипед не изобретал - 1-вире скопипастил из своего древнего пиковского проекта:
Спойлер
Код:
#include <xc.h>

#pragma config MCLRE=OFF
#pragma config CP=ON
#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
#pragma config PWRTE=ON
#pragma config FOSC=INTRCIO

#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000U
#endif
#define ONE_WIRE_PORTIN      GP1
#define ONE_WIRE_PORT      GP1
#define ONE_WIRE_DDR      TRISIO1
#define CONVERT_TEMP        0x44
#define WRITE_SCRATCHPAD    0x4E
#define READ_SCRATCHPAD     0xBE
#define COPY_SCRATCHPAD     0x48
#define RECALL_E2           0xB8
#define READ_POWER_SUPPLY   0xB4
#define SKIP_ROM          0xCC

int temperature;
unsigned char ds18b20[9];

void OneWire_Init()
{
   ONE_WIRE_DDR = 0; //Low LINE
    ONE_WIRE_PORT = 0;
    __delay_us(485);
    ONE_WIRE_DDR = 1; //Hi LINE
    __delay_us(70);
    if (ONE_WIRE_PORTIN == 0)
        __delay_us(440);
}

void OneWire_WriteByte(unsigned char data)
{
    unsigned char i;
    unsigned char data_bit;

    for (i = 0; i < 8; i++)
    {
        data_bit = data;
        data_bit = (data >> i) & 1;
        ONE_WIRE_DDR = 0; //Low LINE
        ONE_WIRE_PORT = 0;
 
        if (data_bit == 1)
            __delay_us(1);
        else
            __delay_us(90);

        ONE_WIRE_DDR = 1;

        if (data_bit == 1)
            __delay_us(90);
        else
            __delay_us(1);

        ONE_WIRE_DDR = 1;
 
        __delay_us(1);
    }
}

unsigned char OneWire_ReadByte(void)
{
    char i;
    unsigned char data = 0;

    for (i = 0; i < 8; i++)
    {
        __delay_us(1);
        ONE_WIRE_DDR = 0; //Low LINE
        ONE_WIRE_PORT = 0;
        __delay_us(5);
        ONE_WIRE_DDR = 1;
        __delay_us(15);
        if (ONE_WIRE_PORTIN == 1)
            data |= (1 << i);
        __delay_us(55);
    }
    return data;
}

void main(void)
 {
   GPIO   = 0x00;
   CMCON   = 0x07;
   TRISIO   = 0x00;
   while (1)
   {
      OneWire_Init();
      OneWire_WriteByte(SKIP_ROM);
      OneWire_WriteByte(CONVERT_TEMP);
      __delay_ms(1000);
      OneWire_Init();
      OneWire_WriteByte(SKIP_ROM);
      OneWire_WriteByte(READ_SCRATCHPAD);
      ds18b20[0] = OneWire_ReadByte();
      ds18b20[1] = OneWire_ReadByte();
      ds18b20[2] = OneWire_ReadByte();
      ds18b20[3] = OneWire_ReadByte();
      ds18b20[4] = OneWire_ReadByte();
      temperature = ((unsigned int)ds18b20[1] << 8 | (unsigned int)ds18b20[0]);
      if((ds18b20[1] & (1<<7))==0)
      {
         temperature*=5;
         temperature>>=3;
      }
      else
      {
         temperature=-temperature;
         temperature*=5;
         temperature>>=3;
         temperature=-temperature;
      }
      if(temperature >= 40) GP2=0;
      if(temperature <= 20) GP2=1;
   }
}

вроде как работает:
Изображение
Вложение:
PIC12F629.zip [760 байт]
Скачиваний: 265


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 19:52:33 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 2
а то такая сложность достать gcc7, ага)

Вопрос не в том насколько сложно достать gcc 7, а в том, сколько людей бросится его искать и интегрировать в свои IDE, чтобы запустить мой код :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мигать светодиодом. ARM или не-ARM?
СообщениеДобавлено: Пт май 18, 2018 19:56:42 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Мож кому надо - на сахаре klen gcc 9 для ARM выложил
http://caxapa.ru/840498.html


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3623 ]     ... , , , 144, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: S.K., МЕХАНИКД и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y