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
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

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

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

    • Почему? Это чуть ли не единственная схема, режимы в которой мало зависят от применяемых ламп. Почему не 22000? Или, 47000? И, с каких пор это стало "обычно"? Зачем ставить 2200 там, где и 100 с головой? Только не надо тащить сюда "доказательства" из интернета, выдавая безграмотность за "бескомпромиссность". Его наличие, к стати, мало что меняет. Усиление каскада без конденсатора 15, с конденсатором 17. Разве что, спектр гармоник станет чуть другим. Виктор! Как характерно для большинства схем, валяющихся в интернете, тут хватает несоответствий и неточностей.Скажем, при указанном токе выходной лампы на её катодном резисторе будет около 120 Вольт, а на аноде 6Н8С - примерно 110. Это означает -10 Вольт смещения, против требуемых для данного режима 20 - 24. Если эту схему собирать так, как нарисовано, как то работать будет. Однако, получится мало хорошего. Но, сама схема правильная и довети её до ума можно. Спрашивайте, поможем.
    • Ну что за люди... Назвался звучным ником, а за три года всего один раз пукнул.. да и то в тему какого-то дристуна.
    • зашунтировал затворы резисторами 30 к - вроде фронты получше стали - конденсатор на первичке убрал , потребление 28мА - с двумя кондерами по питанию  погорячился- хватит одного - как считаете - можно заводить ? деление 4 us
    • Спасибо Вам за качественный ответ!!! Я знал что Вы знали
    • в гугле -бан??   или проблема с даташитами?
    • Для пенсионеров у нас протезирование бесплатное,  но из самых  говёных материалов и по  технологиям 18го века.  ЗЫ:  И ещё какая фантастика...Протезы будут занимать половину е_ала,  мешать размещению и разжёвыванию пищи,  слетать с посадочных мест и смешиваться во рту с едой, нарушать дикцию,  способствовать постоянному  инфицированию и запаху изо рта,  прикусыванию языка и щёк,  а также  аллергии непонятного происхождения, отчего ты будешь ощущать себя другим, как бы обновлённым человеком... И это всё бесплатно... А как бывает платно... например в Америке, для того же Шнурова, ты никогда не поймёшь, т.к. просидел с паяльником всю жизнь, но денег, чтобы смочь это понять,  так и не напаял. 
    • А это и есть похвальство - собственная разработка. Так откройте тему своей собственной разработки АС.Пусть люди посмотрят.,оценят Ваш передовой опыт.Выложите графики АЧХ,снятые профессионально..,чтобы всё было не голословно. А в этой теме позвольте делать "интерференционные" щиты ГИ и выкладывать свои впечатления и наработки. Спасибо.
  • Покупай!

×
×
  • Create New...