значит так, показывайте всё, что есть в удобном для просмотра на форуме формате: схему протеуса, исходники в том виде, как тестируете в протеусе, настройки МК в протеусе и настройки проекта в Студии или чем вы там собираете. без этого дальнейшее гадание на кофейной гуще считаю пустой тратой времени
Добавлено after 1 minute 57 seconds: хотя нет, не выкладывайте 32 Гц чем вас не устраивает, вы сколько хотите? вы учли, что у вас OC1A дергается в 2 раза реже, ведь при каждом совпадении он МЕНЯЕТ своё состояние
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Чт мар 29, 2018 13:00:47
Открыл глаза
Зарегистрирован: Вт май 05, 2009 17:32:50 Сообщений: 52
Рейтинг сообщения:0
С кварцем разобрался Это что то с математикой в протеусе. я уже и 8 версию поставил все ровно проблема не ушла По расчетам должно быть так 16000000/1024/250 = 62,5Гц а фактически вот так 16000000/1024/124 = 62,5Гц метод подбора сработал
Цитата:
32 Гц чем вас не устраивает
В дальнейшем на каждое нажатие кнопки частота будит меняться на 62,5Гц в описании я выкладывал За подсказку огромное спасибо по настройки кварца.
По расчетам должно быть так 16000000/1024/250 = 62,5Гц а фактически вот так 16000000/1024/124 = 62,5Гц метод подбора сработал
еще раз повторяю: вы настроили 16000000/1024/250=62,5 Гц. и именно с этой частотой у вас возникают прерывания (или происходит совпадение с OCR1A). именно в этот момент происходит изменение уровня на пине на противоположный, т.е. фронты сигнала следут с частотой 62,5 Гц, а период этого сигнала, естественно, в 2 раза ниже, т.к. в периоде 2 фронта. именно поэтому вам пришлось в 2 раза уменьшить OCR1A, чтобы полчить ваши 62,5 Гц
никакого подбора, просто внимательно считать надо. и когда я писал "32 чем не устраивают", я намекал на то, что вы получили ровно то, что настроили
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
я вас не понимаю. чтобы получить меандр 62,5 Гц вашим методом надо 16 МГц при предделлителе 1024 дополнительно при помощи OCR1A поделить на 125. это не гадание, а расчет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Чт мар 29, 2018 15:27:09
Открыл глаза
Зарегистрирован: Вт май 05, 2009 17:32:50 Сообщений: 52
Рейтинг сообщения:0
Мне самому очень трудно объяснить, а на пальцах показать не получается (самое главное что частота нужная получилась) Я как ЗАМАТЕРЕЮ в программировании вот тогда я всем все объясню ЭТО шутка.
Товарищи! Подскажите... Понемногу разбираюсь с написанием прог для МК, а конкретно для AT2313 добрался до работы с экранчиком 16x2 по I2C Почитав разных материалов понял что без доп.библиотеки будет тяжело, нашел на просторах инета http://davidegironi.blogspot.com/2013/0 ... based.html
в попытках приспособить данную библиотеку и код примера в atmel studio 7 столкнулся с ошибками вида
error: undefined reference to `uart_init(unsigned int)' error: undefined reference to `uart_puts(char const*)' error: undefined reference to `lcd_init(unsigned char)' error: undefined reference to `lcd_home()' error: undefined reference to `lcd_led(unsigned char)' и т.д.
я так понимаю типа не определены процедуры/функции с этими именами: uart_init, uart_puts и т.д. но по факту они определены в файле uart.h, файл этот подключен. В солюшн эксплорере все эти файлы обозначенные в #include добавил по ПКМ->Add existing item. Что ему проклятому нужно?
while(1) { lcd_led(led); //set led led = !led; //invert led for next loop
//test loop int i = 0; int line = 0; for(i=0; i<10; i++) { char buf[10]; itoa(i, buf, 10); lcd_gotoxy(1, line); lcd_puts("i= "); itoa(i, buf, 10); lcd_gotoxy(4, line); lcd_puts(buf); line++; line %= 2; uart_puts(buf); uart_puts("\r\n"); _delay_ms(100);
} // end_for } // end_while(1) } // end_main
uart.h Спойлер
Код:
#ifndef UART_H #define UART_H /************************************************************************ Title: Interrupt UART library with receive/transmit circular buffers Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury File: $Id: uart.h,v 1.8.2.1 2007/07/01 11:14:38 peter Exp $ Software: AVR-GCC 4.1, AVR Libc 1.4 Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz License: GNU General Public License Usage: see Doxygen manual
LICENSE: Copyright (C) 2006 Peter Fleury
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
/** * @defgroup pfleury_uart UART Library * @code #include <uart.h> @endcode * * @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers. * * This library can be used to transmit and receive data through the built in UART. * * An interrupt is generated when the UART has finished transmitting or * receiving a byte. The interrupt handling routines use circular buffers * for buffering received and transmitted data. * * The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define * the size of the circular buffers in bytes. Note that these constants must be a power of 2. * You may need to adapt this constants to your target and your application by adding * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile. * * @note Based on Atmel Application Note AVR306 * @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury */
/** @brief UART Baudrate Expression * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 */ #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1)
/** @brief UART Baudrate Expression for ATmega double speed mode * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 */ #define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-1)|0x8000)
/** Size of the circular receive buffer, must be power of 2 */ #ifndef UART_RX_BUFFER_SIZE #define UART_RX_BUFFER_SIZE 32 #endif /** Size of the circular transmit buffer, must be power of 2 */ #ifndef UART_TX_BUFFER_SIZE #define UART_TX_BUFFER_SIZE 32 #endif
/* test if the size of the circular buffers fits into SRAM */ #if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) ) #error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM" #endif
/* ** high byte error return code of uart_getc() */ #define UART_FRAME_ERROR 0x0800 /* Framing Error by UART */ #define UART_OVERRUN_ERROR 0x0400 /* Overrun condition by UART */ #define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */ #define UART_NO_DATA 0x0100 /* no receive data available */
/* ** function prototypes */
/** @brief Initialize UART and set baudrate @param baudrate Specify baudrate using macro UART_BAUD_SELECT() @return none */ extern void uart_init(unsigned int baudrate);
/** * @brief Get received byte from ringbuffer * * Returns in the lower byte the received character and in the * higher byte the last receive error. * UART_NO_DATA is returned when no data is available. * * @param void * @return lower byte: received byte from ringbuffer * @return higher byte: last receive status * - \b 0 successfully received data from UART * - \b UART_NO_DATA * <br>no receive data available * - \b UART_BUFFER_OVERFLOW * <br>Receive ringbuffer overflow. * We are not reading the receive buffer fast enough, * one or more received character have been dropped * - \b UART_OVERRUN_ERROR * <br>Overrun condition by UART. * A character already present in the UART UDR register was * not read by the interrupt handler before the next character arrived, * one or more received characters have been dropped. * - \b UART_FRAME_ERROR * <br>Framing Error by UART */ extern unsigned int uart_getc(void);
/** * @brief Put byte to ringbuffer for transmitting via UART * @param data byte to be transmitted * @return none */ extern void uart_putc(unsigned char data);
/** * @brief Put string to ringbuffer for transmitting via UART * * The string is buffered by the uart library in a circular buffer * and one character at a time is transmitted to the UART using interrupts. * Blocks if it can not write the whole string into the circular buffer. * * @param s string to be transmitted * @return none */ extern void uart_puts(const char *s );
/** * @brief Put string from program memory to ringbuffer for transmitting via UART. * * The string is buffered by the uart library in a circular buffer * and one character at a time is transmitted to the UART using interrupts. * Blocks if it can not write the whole string into the circular buffer. * * @param s program memory string to be transmitted * @return none * @see uart_puts_P */ extern void uart_puts_p(const char *s );
/** * @brief Macro to automatically put a string constant into program memory */ #define uart_puts_P(__s) uart_puts_p(PSTR(__s))
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ extern void uart1_init(unsigned int baudrate); /** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */ extern unsigned int uart1_getc(void); /** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */ extern void uart1_putc(unsigned char data); /** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */ extern void uart1_puts(const char *s ); /** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */ extern void uart1_puts_p(const char *s ); /** @brief Macro to automatically put a string constant into program memory */ #define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
/**@}*/
#endif // UART_H
Ваще есть ещё какие-нибудь IDE с дебагером для написания программ на Atmel-овских МК, Atmel-studio как-то излишне заморочена на мой взгляд, инсталятор ставит тьму всякой-всячины.
Последний раз редактировалось karaseg Вт июл 03, 2018 20:13:55, всего редактировалось 1 раз.
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Вт июл 03, 2018 17:12:30
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Вообще-то такие длинные тексты лучше брать под спойлер (это все появляется, если нажать кнопик "Редактор").
Ну, и по делу - нужно сложить ту библиотеку в папку проекта, прямо с ее папками, а потом включать в проект посредством ПКМ не *.h, а *.c. Нужные *.h компилятор найдет сам, там же пути прописаны - #include "uart/uart.h" означает, что компилятор должен взять uart.h из подпапки uart в папке проекта. А вот *.с компилятор сам не найдет, их надо включить в проект.
Народ, если нет особых требований, типа поддержки ATXmega, обычно, пользуется АВР Студией 4.19, она, пожалуй, самая стабильная и хорошо работающая. Более поздние Студии, да, излишне тяжелые и тормозные, особенно на машинках постарше. А Студия 4.19 летает на любых машинках, начиная с 3-го Пентиума.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
В AVR Studio 4, в Tools-Customise-Tools хотел добавить пунктик вызов avrdude чтобы вливать прошивку в МК через программатор USBASP в Atmel Studio 7 была возможность указать "макросы" вместо пути и имени файла $(TargetDir)$(TargetName) в поле arguments: "-c usbasp -p t2313 -v -U flash:w:$(TargetDir)$(TargetName).hex:i" В 4 версии что-то не пойму, нельзя имя "прошивки" передавать во внешнюю программу?
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Ср июл 04, 2018 13:13:58
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Цитата:
В AVR Studio 4, в Tools-Customise-Tools хотел добавить пунктик вызов avrdude чтобы вливать прошивку в МК через программатор USBASP
А зачем? ИМХО, лучший вариант для USBASP - прорамма AVRDUDEPROG 3.3. Первый раз собрал проект, запустил AVRDUDEPROG, нашел и открыл в ней хекс-файл, записал, попробовал, свернул AVRDUDEPROG в трей, и все, правь проект дальше. Сделал новую сборку, одним кликом поднял из трея AVRDUDEPROG, вторым прошил новый вариант, и вперед!..
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Ср июл 04, 2018 17:52:29
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Я делал проще.
Код:
char stnames[][16] PROGMEM = { " ", " Тенгри FM ", // 100.50 " Радио Текс ", // 101.20 "Русское радио ", // 102.80 " Love Radio ", // 104.80 " Радио NS ", // 105.60 " Авторадио ", // 106.30 " Что-то FM ", // 106.70 " Наше радио ", // 107.00 " Дала FM " // 107.70
};
В качестве указателей на строку используются stnames[i]. И, если не врет мой склероз, фиксированная длина строки необязательна. И писать "\0" после текста строки тоже необязательно, Си сам дополняет двоичным нулём строку, записанную в кавычках.
Да, а с кнопками разобралась? (в соседней теме)
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Вы сделали не правильно. Предыдущему оратору: судя по вашим ошибкам, вы используете свежую версию avr-gcc, поэтому попробуйте квалификатор __flash вместо PROGMEM, только писать его надо сразу после или перед каждым const. Если скомпилируется, то можно будет работать с указателями на строки точно так же, как с указателями на ОЗУ, т.е. pgm_read_XXX не будут нужны. Это невероятно удобнее.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Пт июл 06, 2018 03:33:02
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Цитата:
Вы сделали не правильно.
Как сказать? Я решал ту же самую задачу: получить набор строк для выдачи на LCD-экранчик, но для ее решения применил не кучку отдельных строк с массивом указателей на них, а обыкновенный двумерный массив. Недостаток этого решения - фиксированная (и максимальная) длина строки, т.е. перерасход памяти на пробелы, дополняющие более короткие строки. Впрочем, не факт, что это недостаток - при изменении какой-либо строки на экране не надо отдельно стирать предыдущую - новая строка точно перекрывает старую. Для этого же служит и первая (нулевая) пробельная строка, но это актуально только для моего приложения.
Да, про необязательность одинаковой длины строк я ошибся, мой склероз таки соврал.
Добавлено after 43 minutes 15 seconds: И вообще, здесь это слегка оффтопик, а у меня возник вопрос по теме.
Цитата:
вы используете свежую версию avr-gcc
Как я понимаю, эта версия входит в свежую версию Студии, да? А нельзя ли как-нибудь прикрутить ее к Студии 4.19?
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
А нельзя ли как-нибудь прикрутить ее к Студии 4.19?
можно, путем тупого переписывания папки со "старым" тулчейном файлами из "нового". Если хочется сохранить и работоспособность старого - тогда при помощи компиляции "внешним" makefile.
я собираю проекты в Eclipse, и у меня шесть версий avr-gcc (хотя пользуюсь старыми только для отладки в протеусе, т.к. новые генерируют отладочную инфу так, что протеус не понимает нифига).
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Как я понимаю, эта версия входит в свежую версию Студии, да? А нельзя ли как-нибудь прикрутить ее к Студии 4.19?
Можно так - убрать птичку и указать путь к toolchain: В качестве продвинутого редактора можно использовать Netbeans - хорошо импортирует проект созданный AVR Studio 4
не всегда помогает. я столкнулся с тем, что в последних версиях avr-gcc то ли папки как-то поменяли, то ли их содержимое стало другим, но просто указание СТАРОЙ студии пути к НОВОМУ тулчейну может привести к тому, что некоторые утилиты (типа avr-size или make) не смогут вызываться. не утверждаю, что так происходит всегда, но у меня так было...
мой вариант (с переписыванием папок) хотя бы оставляет доступными старые утилиты.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
да avr-size AVR Studio не включает в свой makefile, при использовании внешнего toolchain. Но компилируется нормально. В новых GCC исключили опцию -C для avr-size. Используют avr-objdump.exe - опций много, он поинтереснее выдает информацию (GCC AVR 8.1): или так: avr-objdump -s -j .note.gnu.avr.deviceinfo avr.elf Contents of section .note.gnu.avr.deviceinfo:
Заголовок сообщения: Re: AVR studio в вопросах и ответах
Добавлено: Пт июл 06, 2018 12:18:02
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
ARV писал(а):
как avr-gcc распределяет память при инициализации строковых "переменных"
Ну посмотрел. Это же опять про массив указателей на кучку отдельных строк, и то, и другое в PROGMEM. Я же предложил банальный массив строк. И то, и другое средство позволяют получить доступ к строке по ее номеру - собственно, ради этого все и затевалось. Только массив указателей на отдельные строки позволяет делать сами строки различной произвольной длины, а массив строк должен набираться из строк одинаковой длины, поскольку адресация в него ведется банальным умножением первого индекса (номера строки) на длину одной строки (это я подглядел в дизасме). Да, время выполнения этого действия больше, чем достать указатель из таблицы, но кого это волнует? А про то, что менять строки на экране проще, поскольку новая строка точно перекрывает старую, я уже написал.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Доброго времени суток. Как в Atmel Studio 7 задать частоту контроллера в опциях проекта, чтобы не задавать ее вручную в хидерах. В AVR Studio 4 это было легко и интуитивно, тут же просто черт ногу сломит
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения