Jump to content
Вячеслав_НС

помогите с кодом на С для Atm8 ( я начинающий)

Recommended Posts

помогите разобраться с кодом .(послать значение по шине TWI на ЦАП PCF8591) не работает в протеусе ...

#define F_CPU 8000000UL 
#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>

//*** ИНИЦИАЛИЗАЦИЯ ШИНЫ TWI ***/
void TWI_Init(void)
{
    // Установка тактовой частоты F_scl  = 100 кГц
    TWBR =32;
    TWSR &= (~((1<<TWPS1)|(1<<TWPS0)));
    TWCR |= (1 << TWEN);            // Разрешение работы TWI-модуля
}


/*** ЗАПУСК TWI ***/
void TWI_Start(void)
{
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
    TWDR = 1001000; // передача адреса модуля PCF8591 в шину TWI
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
}

/*** ОСТАНОВКА TWI ***/
void TWI_Stop(void)
{
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
    while(TWCR & (1<<TWSTO));        // Ожидание завершения передачи условия СТОП
}
/***ПЕРЕДАЧА ДАННЫХ В TWI***/
void TWI_WriteByte(uint8_t data)
{
    TWDR = data;                    // Загрузка данных в TWDR
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR & (1 << TWINT)));    // Ожидание завершения передачи данных
}
/*** ПЕРЕДАТЬ ЗНАЧЕНИЕ В PCF8591 ***/
void PCF8591_get(void)
{
    TWI_Start();                // Запуск TWI
    TWI_WriteByte(0x40);        //включаем цап
    TWI_WriteByte(100);            // запись в ЦАП значения 100
    TWI_Stop();                    // Остановить TWI
}            

    int main(void)
{
    TWI_Init();    
    while (1)
{
        PCF8591_get;
       _delay_ms(50);
  }
}

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

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

Читать статью

в ДНК, видимо. Такая каша в исходниках, грех ошибок не наделать.

процедура заканчивается на "_get" а в коментарии написано "Передать...", не удивительно что работает не так как задумано.

Share this post


Link to post
Share on other sites
6 часов назад, Гость ;tv сказал:

И в чем была ошибка? 

#define F_CPU 8000000UL
#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
//*** ИНИЦИАЛИЗАЦИЯ ШИНЫ TWI ***/
void TWI_Init(void)
{
    // Установка тактовой частоты F_scl  = 100 кГц
    TWBR =32;
    TWSR &= (~((1<<TWPS1)|(1<<TWPS0)));
    TWCR |= (1 << TWEN);            // Разрешение работы TWI-модуля
}

/*** ЗАПУСК TWI ***/
void TWI_Start(void)
{
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
    TWDR = 0x90; // передача адреса модуля PCF8591 в шину TWI
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
}

/*** ОСТАНОВКА TWI ***/
void TWI_Stop(void)
{
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
    while(TWCR & (1<<TWSTO));        // Ожидание завершения передачи условия СТОП
}
/***ПЕРЕДАЧА ДАННЫХ В TWI***/
void TWI_WriteByte(uint8_t data)
{
    TWDR = data;                    // Загрузка данных в TWDR
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR & (1 << TWINT)));    // Ожидание завершения передачи данных
}

int main(void)
{
    TWI_Init();
    while (1)
    {
        TWI_Start();                // Запуск TWI
        //_delay_ms(50);
        TWI_WriteByte(0x40);        //включаем цап
        //_delay_ms(50);
        TWI_WriteByte(0x80);            // запись в ЦАП значения 100
        //_delay_ms(50);
        TWI_Stop();
    }
}

 

--------------------------------------------------------------------------------

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

конкретно - 

1) убрал :

void PCF8591_get(void)
{
    TWI_Start();                // Запуск TWI
    TWI_WriteByte(0x40);        //включаем цап
    TWI_WriteByte(100);            // запись в ЦАП значения 100
    TWI_Stop();                    // Остановить TWI
}   

//перенес все это в главный цикл программы:

int main(void)
{
    TWI_Init();
    while (1)
    {
        TWI_Start();                // Запуск TWI
        //_delay_ms(50);
        TWI_WriteByte(0x40);        //включаем цап
        //_delay_ms(50);
        TWI_WriteByte(0x80);            // запись в ЦАП значения 100
        //_delay_ms(50);
        TWI_Stop();
    }
}

2) поправил эту строчку :

TWDR = 1001000; // передача адреса модуля PCF8591 в шину TWI

//адрес обращения к микросхеме PCD8591 переправил с 1001000  (он же в 16 битном виде -0x48) на 10010000 или 0x90  (0x90 содержит 8 бит для управления режимом чтения-1 или записи -0 в PCD8591)

3)для того , чтоб в протеусе нормально работал модуль i2c debugger , желательно дополнить задержками основной цикл  (//_delay_ms(50);)

*********************************************

а вообще схема такая - энкодером (есть рабочий код) через atm8 управляю по шине i2c ЦАП PCD8591...ну это не еще вся схема.растет по тихоньку

5 часов назад, Alexeyslav сказал:

в ДНК, видимо. Такая каша в исходниках, грех ошибок не наделать.

процедура заканчивается на "_get" а в коментарии написано "Передать...", не удивительно что работает не так как задумано.

о бог данного форума ! извините тупое быдло ( начинающего с нуля изучать программирование на СИ и микро контролеры авр ) за те ошибки , которые я делаю изучая примеры ,  выкладываемые некоторыми божествами в инете ... трудновато написать свой код,когда в инете столько "грамотеев".странно,вроде форум для помощи начинающим.но я еще ни разу ее не получил...пока только оскорбления.

Share this post


Link to post
Share on other sites
                     

Контроль в спящем режиме: повышение КПД батарейного питания с помощью DC/DC MAX17225 nanoPower

В статье описан практический опыт разработчика, применившего повышающий DC/DC-преобразователь MAX17225. В результате ряда практических экспериментов, потребовавших существенного обновления технической базы компании-разработчика, автор убедительно доказывает преимущества выбранного компонента и схемотехнической реализации. Увеличенное на 50% время автономной работы лучше других аргументов говорит об эффективности конвертеров MAX17225, а также о важности предварительной оценки элементной базы.

Подробнее

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By pndbr
      Здравствуйте. Может у кого есть печатная плата для отладочной платы на atmega8,32,128 в корпусе tqfp или attiny2313.
      Накопилось много распая с незалоченными камнями и очень хочется пустить их в дело и наконецто научиться хоть как-то программировать. Рисовать печатку самому не хватает опыта. Может у кого есть наработки? Прошу поделиться.
      Поиск выдает только отладочные платы в дип. А если и есть tqfp то в ардуиновском формате т.е без доп перефирии (же дисплеев,клавиатуры,7 сегментных индикаторов,потенциометров,энкодеров..и.т.д)
    • By Ruslik334
      Уважаемые электроники-программисты. Кто силен в CVAVR? Или может кто подскажет где уже есть. 
      Есть вот такой прогресс бар https://radioparty.ru/programming/avr/c/361-lesson-lib-lcd написанный в Atmel Studio. Но у меня весь проект в CVAVR, попытался привязать его, но не поддается он мне. Помогите или дайте вектор. На Ардуино много, но там для меня совсем темень
    • By voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c
  • Сообщения

    • поставить получится, места хватает. но вот тут подумал, возможно занкомый поедет в выходные в питер. Хочу его попросить купить подстроечники нужные, что бы и не выпаивать ничего и сделать все по человечески. Какие лучше всего ставить емкости по вольтажу? или все же не имеет значения? что бы все было как надо)   вот примерно такой набор подойдет? 
    • Про диаметр не забудьте. Чтобы влез. Лучше прикупите ещё такой полярный. Они маленькие. Вдруг ваш не удастся нормально поставить.
    • понял. неполярник 47мкФ 50в и полярник 1000мкФ 6.3-16 в. второй завтра докуплю.
    • Тогда лучше пока не трогайте. Поменяйте конденсаторы и погоняйте на сигнале полчасика. Потом уберите сигнал и замерьте ТП. Осторожно, чтобы не задеть ничего.
    • постоял, нагрелся и второй. но температура слега на ощуп разница. ток покоя 14.3 стал
    • Повлияет. Лучше потом подстроить немного, чем спалить сразу по неосторожности. Вдруг подстроечник не так впаяете. Или ещё что.
    • понял вас, лампа в разрыв ноля или фазы из розетки. на ТП покоя при замере никак не повлияет?   
×
×
  • Create New...