Вячеслав_НС

помогите с кодом на С для Atm8

8 сообщений в этой теме

Здравия всем ! 

Пожалуйста помогите разобраться . Пытаюсь написать прошивку для Atmega8 на С в Atmel Studio 7.0 . 

Программка простая ( небольшая ) ... по сути - частотомер ( только для небольшого диапазона частот ... примерно - от нескольких Гц , до нескольких десятков кГц ) .

Импульсы считать со входа T0 ( PD4 )  ...микр-ра Atmega8a ( 28 pin ) . Использовать TCNT1 (16 bit) . Полученное число выводить на Lcd - nokia5110 .

Как я понимаю прерывания не нужны , алгоритм простой :

1) инициализация дисплея и счетчика 

2) остановить (запретить счет) счетчик AVR -  ( CS12,CS11,CS10-прописать нули )

3) обнулить ( отчистить) буфер дисплея и счетчика ( AVR )

3) запустить бесконечный цикл :

                                                                а) разрешить считать импульсы с  T0 ( PD4 )  - ( CS12,CS11,CS10-прописать единицы )

                                                                б) задать паузу  (  надеюсь правильно рассчитал - 10 мсек )

                                                                в)  запретить считать - ( CS12,CS11,CS10-прописать нули )

                                                                г) вывести полученное значение со счетчика на дисплей 

 

 

( СИЛЬНО НЕ СМЕЙТЕСЬ ... Я НАЧИНАЮЩИЙ . с АЦП AVR разобрался удачно , собрал схемку в протеусе , написал прошивку , спаял ... все работает . а вот с таймером завис надолго . есть много примеров в инете , но все слишком навороченные для меня . запутался . )

вот примерно что получилось с таймером ... упрощал как мог ...в общим не получается . подскажите где косяк .(только просьба - без лишних наворотов и по возможности с комментариями ... задача - не повторить чужую программу ... а разобраться самому )

//Atmega8A

#define  F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "n5110.h"

void presets(){
    Lcd_init();
    Lcd_clear();
    TCCR1B =0x00;
    TCNT1=0000;

     TCCR0 |= (1 << CS01); 
  }

int main(void)
{
    presets();
    while (1) 
    {

     TCNT1=0000;
    TCCR1B|=(1<<CS12)|(1<<CS11)|(1<<CS10);
    _delay_ms(10);
    TCCR1B &=~(1<<CS12)|(1<<CS11)|(1<<CS10);
        
    Lcd_prints(5,2,FONT_1X,(TCNT1)PSTR("Hz"));    //                                                КОМПИЛЯТОР РУГАЕТСЯ НА ЭТУ СТРОЧКУ 
    Lcd_update();
    }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    552
3 часа назад, Вячеслав_НС сказал:

а вот с таймером завис надолго

 

3 часа назад, Вячеслав_НС сказал:

КОМПИЛЯТОР РУГАЕТСЯ НА ЭТУ СТРОЧКУ 

А причём тут таймер, если он ругается на строчку Lcd_prints ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не понимаю как правильно вывести показания таймера(счетчика) на LCD  .  если написать так ... Lcd_prints(10,2,FONT_1X,( unsigned char ) PSTR("Hz"));    то программа воспринимает без ошибок . вот я и прошу...пожалуйста подскажите некоторые моменты в написании программки . в частности - как оформить вывод на экран значение из счетчика TCNT1 в бесконечном  цикле . учусь по готовым примерам . с АЦП сам разобрался , с таймерами засел . не все понимаю . нужен простой пример .очень простой . либо подсказка . за ранее благодарен .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

как всегда , простые вещи упускаю из виду ... не "Lcd_prints " надо было использовать , а "Lcd_printf ". Прошу прощения . похоже тему зря создал . пока ковырялся в сложном , допустил простую ошибку . Простите мужики , лоханулся . да и подходящий пример для себя уже нашел в инете . но все равно - спасибо . 

вообще я хотел написать прошивку не совсем для частотомера . там нужно подставить формулу (F = 0,48/(R1×C1) расчета емкости по частоте ( генератор на обычной k561лн2 . из двух элементов . резистор на 350 кОм и собственно - измеряемая емкость ) . получается измеритель емкости .просто есть куча плат с СМД детальками .сопрухи подписаны , емкости -нет .думаю измерение в пределах ~ 20 pF - 800nF мне хватит . подходящий пример прошивки нашел . формулу вставил . все работает .погрешность не большая . единственное , там используется двухстрочный дисплей 1602 , а не нокиа-5110 .

генератор.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    167
7 часов назад, Вячеслав_НС сказал:

погрешность не большая

С чем сравнивали? За эталон что брали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

поправка ,  я имел ввиду - небольшое расхождение с номиналом на проверочной емкости , а не погрешность ( моя схемка ни в коем случае не претендует на калибровочное профессиональное оборудование ). я только начал осваивать СИ и МК  . к слову - не всегда удается запустить МК от внешнего кварца , как и в данном случае . так что точность измерения емкости , конечно не высокая . проверял разными емкостями - от 27pF до 680nF . на емкости 91pF показания - 91 pF !!!

если не ошибаюсь , этот тип емкости довольно точный и термостабильный (4я с лева ).

 

другое дело - схема с использованием АЦП , там измерение не завязано на частоту ( при работе АЦП до 200кГц ). получилась вполне приемлемая точность измерения . шкала измерения от - 10.5 кПа до + 10.5 кПа ... калибровал свою схемку по цифровому манометру ( у него погрешность y±0.005%) расхождение в показаниях начинается на сотых долях кПа (0.0х).

емкости.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если кому то интересно ... решил проблему с запуском atmega8 от внешнего кварца ( в частности 8 Мгц ) , я просто убрал нагрузочные емкости . по схеме  - 22pF . более опытные люди подсказали - в МК могут присутствовать свои , внутренние ( подтягиваются настройками фьюзов ). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Kudich
      Всех приветствую!
      Сам я программирую на стандартной среде ардуинки, и в одном проекте потребовалось увеличить частоту ШИМ на портах 5,6,9,10,11,13 Arduino Micro. На этой ардуино стоит Atmega32u4, есть тут знатоки avr? Как повысить частоту на этих пинах?
    • Автор: Evg69
      добрый день. Вернулся к микроконтроллерам после длительного перерыва. Сижу туплю и даже гугл не помог.
      Два вопроса по Atmel Studio 7. Режим отладки. Симуляция.
      1. Как включить окно в котором можно посмотреть что контроллер выплевывает
      в UART? Не содержимое регистра, а типа терминала.
      2. Как подсунуть студии файлик с содержимым EEPROM?
    • Гость Keil
      Автор: Гость Keil
      Добрый день, ситуация такая - попались мне под руку куча рассыпухи в числе которых достаточное количетво тинек и прочей лабуды - пытась хеловродить, попробовал взять готовый пример работы тиньки и лсдишника здесь также имею ардуинку как  Айсипи и чудесно мигаю светодиодом на мк прошитом ею же  так вот при попытке залить код который по ссылке чуда не произошло.
      курение мануалов лсдишника дало понять лиш одно что старший и младший биты одинаковы с лсдишником со статьи - лсдишник рабочий (игрался контрастом одной строки через V0  и потенциометр ) - как в прочем и мк, было задумано ковырнуть все это в протеусе и атмельстудии, но результатом не увенчалось. Пожалуйста тыкните носом что да где не так.
      fail.zip
    • Автор: Static
      Доброго дня всем!
      Не так давно решил опробовать использовать в схемах ATmega в корпусе TQFP и возник такой вопрос. На ней имеется аж три ноги на "-" и две под "VCC". Подсоединять нужно все или можно только по одной любой?
      Заранее благодарен за помощь.
    • Автор: Doublman
      Всем доброго времени суток.
      Развел платки - коммутаторы на основные МК.
      Платы коммутационные для HV PROG (параллельного программирования).
      Питание 5в оставил для перемычки (видно на фото).
      Комплект из 3-х плат ATMEGA 8, 16, 32, 48(P), 88, 164P, 168, 324P, 664P, 1284P, 8535, ATTINY 48, 2313.
      https://radikal.ru/fp/4f4203a9b1d54f9fbb92318c2234e576
      Имею 5 комплектов. Цена 450 за все 3 платки ("лист" на этой фотографии) Имею 5 комплектов. https://radikal.ru/fp/73ce63f7f99b4f7d9b744b2563204c1b
      Платки находится в Самаре, если почтой то +50р почте.