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

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

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

процедура заканчивается на "_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
                     

Материалы вебинара STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

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

Подробнее...

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
  • Сообщения

    • Когда схема объёмная и не простая, я распечатываю листы и склеиваю в единую схему. С таким материалом легче работать, весь маршрут перед глазами. Можно и карандашиком трассу пометить. Потом беру генератор с установленной частотой 1 кГц 250 мВ подаю на AUX. И щупом осциллоскопа с хорошо заточенной иголочкой продвигаюсь по отмеченному маршруту. На мой взгляд, это самый оптимальный режим поиска.
    • Тем что спереди он машину приподнял.
    • А, спереди, слабо пакетик повесить.
    • а я вот дома от котла с трубным отоплением греюсь и без насоса,циркулирует зараза,впрочем как и на авто. можно на авто конечно так установить,что циркуляции не будет.
    • Обалдеть.
    • Набросал по этой схеме. Не причесывал особо, но работать будет, на односторонке лучше не получается. Может кому пригодится.   TDA2004.lay6 Входы слева, выходы справа. Силовая земля справа, сигнальная соотв. слева. Входные конденсаторы малогабаритный лавсан эпкос, вима или аркатроникс, выходные конденсаторы можно шунтировать  пленкой, припаяв ее снизу.
    • @noise как бы ещё с дуней кулачковой познакомился на старости лет,как не через голую черномазую тёлку.Павлентий ща опять ругаться будет.
  • Покупай!

×
×
  • Create New...