Технический форум по робототехнике.
ADonis » 23 апр 2010, 18:53
Мне бы не было так обидно, если бы я нашел косяк, на котором засыпался, пусть он будет самым дурацким... Я ж ничего не поменял! Абсолютно!
milkpower » 26 апр 2010, 19:34
есть вопрос по winavr.
определяем констатну
const uint8_t ls[]="Test line";
в книге Шпак Ю.А."программирование на С....", сказано что константы размещаются в памяти программ, однако AVRstudio в дебагере показывает что оно определилось в sram.
так как же мне разместить константы в памяти программ?
Добавлено спустя 10 минут 39 секунд:
все, нашел, разобрался.
avr123.nm.ru » 26 апр 2010, 19:52
... но не скажу как !
milkpower » 26 апр 2010, 20:06
я плохо искал поиском по форуму
тут все объяснили уже
Винни » 27 апр 2010, 11:36
простите, если вопрос дурацкий, но сам за неделю ковыряний ответа так и не нашел (
датчик 18b20 выдает показания температуры в двухзначном виде, хотя вроде должен выдавать температуру *10, то есть три знака. ну, или больше, если температура выше ста...
вот, значимые части когда, на мой взгляд:
- Код: Выделить всё • Развернуть
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
#include <1wire.h>
#include <ds18b20.h>
#include <math.h>
#include <stdlib.h>
#define MAX_DS18b20 8
unsigned char ds18b20_devices;
unsigned char ds18b20_rom_codes[MAX_DS18b20][9];
- Код: Выделить всё • Развернуть
void main(void)
{
//unsigned char temper;
int temper;
lcd_init(16);
w1_init() ;
ds18b20_init(&ds18b20_rom_codes[0][0],25,35,DS18B20_10BIT_RES);
{
#asm("cli")
ds18b20_devices=w1_search(0xf0,&ds18b20_rom_codes[0][0]);
#asm("sei")
};
- Код: Выделить всё • Развернуть
lcd_init(16);
// Global enable interrupts
#asm("sei")
lcd_clear();
while (1)
{
// Place your code here
#asm("cli")
temper=ds18b20_temperature (&ds18b20_rom_codes [0] [0]);
PORTA.6=0;
#asm("sei")
lcd_gotoxy(5,0);
sprintf(string_lcd, "%01d\n", ds18b20_temperature (&ds18b20_rom_codes [0] [0]));
lcd_puts(string_lcd);
lcd_gotoxy(3,1);
sprintf(string_lcd2,"%-03d" , temper);
lcd_puts(string_lcd2);
delay_ms (800);
PORTA.6=1;
спасибо! и не пинайте сильно, я в этом совсем новичок )
з.ы. инет изучал, поиск по форуму юзал...
Последний раз редактировалось
Vooon 28 апр 2010, 15:22, всего редактировалось 2 раз(а).
Причина: [code=cpp] !!!
milkpower » 27 апр 2010, 21:14
что-то опять не получается.
объявляю функцию, вызываю из программы, функция не работает.
- Код: Выделить всё • Развернуть
void In_pr(void)
{
LCDGotoXY(0,3);
uint8_t ii;
for (ii=0; ii<18; ii++)
{
LCDsendChar(0x2a);
_delay_ms(500);
}
LCDsendChar(0x4f);
LCDsendChar(0x4b);
}
int main(void)
{
LCDinit();
LCDclr();
CopyStringtoLCD(menu01,0,0);
CopyStringtoLCD(menu02,0,1);
CopyStringtoLCD(menu03,0,2);
In_pr; // вызываемая функция
_delay_ms(3000);
CopyStringtoLCD(menu04,0,0);
while(1)//loop
{
}
return 0;
}
а если тело функции вставим в программу, то все без проблем.
Добавлено спустя 3 часа 46 минут 30 секунд:вызывать функцию надо со скобками. Func().
сам спросил сам ответил, вот и поговорил 
blindman » 28 апр 2010, 05:17
Надо включать предупреждения компилятора, многие ошибки (реальные и потенциальные) видно будет на этапе компиляции
milkpower » 28 апр 2010, 23:25
спасибо, воспользуюсь советом.
boez » 29 апр 2010, 11:19
Винни писал(а):простите, если вопрос дурацкий, но сам за неделю ковыряний ответа так и не нашел (
датчик 18b20 выдает показания температуры в двухзначном виде, хотя вроде должен выдавать температуру *10, то есть три знака. ну, или больше, если температура выше ста...
вот, значимые части когда, на мой взгляд:
- Код: Выделить всё • Развернуть
int temper;
...
temper=ds18b20_temperature (&ds18b20_rom_codes [0] [0]);
спасибо! и не пинайте сильно, я в этом совсем новичок )
з.ы. инет изучал, поиск по форуму юзал...
Читаем хелп по функции ds18b20_temperature и узнаем оттуда, в каком формате она возвращает температуру

Винни » 29 апр 2010, 20:14
rat12 » 06 май 2010, 23:50
Вопрос знатокам.
Я использую для создания проекта компилятор CVAVR. Микроконтроллер mega128. Нулевой USART подключен к последовательному порту ПК. Существуют ли решения (загрузчики), позволяющие использовать код, созданный CVAVR и обновлять данный код, без использования программатора, через USART?
Буду очень признателен, если покажете примеры, как это можно сделать. Заранее большое спасибо!
galex1981 » 07 май 2010, 00:00
Да, можно через Уарт прошивать МК. Для этого следует прошить МК прошивкой Bootloader-а, например как в:
viewtopic.php?f=58&t=7269. А затем программой avrdude прошивать через последовательный порт. Подробней поищите на Форуме по слову Bootloader
Webspider » 10 май 2010, 18:29
Помогите Дураку!)
Купил AT45DB161D в SOIC-8, 28выводного не было((
Скажите, пин RDY/BISY(которого у меня нет) вообще как-нибудь используется в исходниках в avr123/Z7 ??Повлияет ли его отсутствие,если буду использвать исходники задачи Z7.?? если да, то подскажите пжлста, что и как конкретно нужно изменить там, чтобы всё нормально работало.(в программировании почти не шарю. оиентируюсь только из 5ой страницы курса)
Заранее благодарю за любую оказанную помощь)
Duhas » 10 май 2010, 18:33
ваша проблема не так давно обсуждалась - пользуйте поиск...
avr123.nm.ru » 10 май 2010, 19:27
Webspider писал(а):Купил AT45DB161D в SOIC-8, 28выводного не было(( Скажите, пин RDY/BISY(которого у меня нет) вообще как-нибудь используется в исходниках в avr123/Z7 ?
Да, используется. Если его нет то код надо поментять - убрать его опрос ( в задаче 4 говорится как раз о том что прога висла без ответа этого пина из-за ошибки в схеме ) и либо добавить в прогу паузы по времени гарантирующие завершение операций внутри памяти (это наверно не надежно) либо добавить код для чтения сосотояния "готов" из соотвтетвующего регистра управления внутри памяти.
С программированием придется вам разбираться либо искать готовый код для AT45DB161D в SOIC-8