реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> mega32l, Врагу такого не пожелаю !!!
Чип-Хрум
сообщение Apr 16 2007, 13:28
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Незнаю уже на что грешить .
Короче : п.о. AVR Ssutio 4.12. s.p.-4 build 498 ,
чипы кодирую на autoprog программаторе hex файлом.
Чип прошивается нормально без проблемм,
запускается mega32 тоже нормально инициирует жк индикатор мт-16s2r.
Выводит на индикатор все правильно .
А теперь самое интересное настраиваю портB на ввод информации.
записываю
DDRB= 0xb0;
а он зараза оказывается 0xff (инфа высвечивается на индикаторе)
Я пролистал всю программу в ассемблере под astudio ни одного обращения
к DDRB.
Оказалось что если в DDRB записать 0xb0 то там окажется 0xff
то бишь перенаправить выводы не удастся а в книге писалось об обратном.
(Микроконроллеры AVR семейств Tiny и Mega автор Евстифеев)
Это еще пол беды Шоу только начинается.
Порт в оставляю на вывод и берусь за портА.
Ставлю подтягивающие резисторы на 39кОм
Настраиваю porta
DDRA=0x00;
PORTA=0x00;
И тыркаюсь на каждый ввод сопротивлением 1 кОм подключенным на 5в.
7 вывод показал мне 0x7f. А остальные промолчали.
Кстати тема приколов не последняя
Особую Благодарность хочется высказать в пользу книги
(Программирование на языке си для avr и pic микроконтроллеров Ю.А. Шпак) maniac.gif
Автор не упомяну ничего о софте каторый дается в приложении что он
нихира не рабочий , глючный , и еще галимый.
А также механизм прерываний описан неправильно!!! maniac.gif
Я уже не говорю про те жыдкие программные примеры для микроконтроллеров
каторые этот чудак на букву МММ дает.
У меня ВСЕ!
Добрые люди !!!Подскажите ламеру где он не прав !!!
help.gif help.gif help.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 16 2007, 13:40
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



1. Если Вы смотрели в описании таблицу Register Summary, то могли увидеть, что DDRB доступен не только как регистр внутренней периферии, но и как ячейка памяти с адресом $37. Естественно, при записи в эту ячейку любого значения, оно же будет записано в регистр.
2. Тон сообщения желательно помягче, здесь не политический форум и не телесистемы.
Цитата
Подскажите ламеру где он не прав !!!
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 16 2007, 13:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Чип-Хрум , я бы советовал бы вам сначала написать программку банального мигания лапками 0-1-0-1-...
А потом уже подымать шум...С такими глюками не встречался - всё работало как часы..Скорее это ляп в программе или битый камень..
Go to the top of the page
 
+Quote Post
Чип-Хрум
сообщение Apr 16 2007, 13:53
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Я это прекрасно понимаю! На ассемблере я си просматривал ,в программе проблемм нет,
при отладке проблемм нет, они появляются только когда чип сидит в седле и
начинает мне показывать то что я не просил.
Я прошу советы по существу!!!
Где я не прав там не прав , а где прав там уж извините!

Сообщение отредактировал Чип-Хрум - Apr 16 2007, 13:54
Go to the top of the page
 
+Quote Post
rumit2000
сообщение Apr 16 2007, 13:56
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 16-03-07
Из: Москва
Пользователь №: 26 228



Цитата(Чип-Хрум @ Apr 16 2007, 14:53) *
Я это прекрасно понимаю! На ассемблере я си просматривал ,в программе проблемм нет,
при отладке проблемм нет, они появляются только когда чип сидит в седле и
начинает мне показывать то что я не просил.
Я прошу советы по существу!!!
Где я не прав там не прав , а где прав там уж извините!

Хорошо бы поглядеть участок кода, который не работает и схемку, по которой он должен работать


--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 16 2007, 14:04
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Чип-Хрум - ответ по существу -
1) попробуйте заменить камень
2) всё же написать программку мигания лапами и проверить камень таким образом, при чём на простой макетке - где всё в воздуже и есть только питание и земля - потыкать осцилографом, если в такой вариации всё будет работать, тогда ищите проблему не в меге..
Это конечно при условии что в программе ляпов нет smile.gif (есть такая народная мудрость - семь раз отмерь 1 раз отреж...)

Сообщение отредактировал Kuzmi4 - Apr 16 2007, 14:06
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 16 2007, 14:15
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
жыдкие

У Вас ошЫбка в программе "Жи Ши" пиши с буквой "И".
Приводите тест программы и map файл.
Go to the top of the page
 
+Quote Post
Чип-Хрум
сообщение Apr 16 2007, 15:15
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



серия atmega32l 5L1808-5-355P6E
4-P0546 ез
Все три камня этой серии.
Возможность получить новые недели через 3.
Народ на чем программируем чипы???
Я еще кошу на программатор.
Кстати насчет семь раз отмерь а один отреж ,если табуретку делать по этому правилу,
то она будет 3.5 метра высотой.

Вот текст программы

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
#include <stdio.h>
#include <avr/eeprom.h>

void init_lcd();
void WriteCondition(unsigned char);
void WriteData(char);
void FontResticle(char);

#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclr(var,bitno) ((var) &= ~(1 << (bitno)))

#define set_cs() (PORTB |= (1 << PB4))
#define clr_cs() (PORTB &= ~(1 << PB4))
#define set_scl() (PORTB |= (1 << PB7))
#define clr_scl() (PORTB &= ~(1 << PB7))

char dat0=0,dat1=0;
char buffer0[2],buffer1[2];
int result = 0;

int main(void)
{
DDRA=0x00;
PORTA=0xff;

DDRD=0xff;

DDRB=0xb0;
PORTB=0x00;


SPCR=0x00;
init_lcd();
goro:
//1
dat0 = PINA;
dat1 = PORTA;

sprintf(buffer0,"%02x",dat0);
sprintf(buffer1,"%02x",dat1);

FontResticle(0x80); // знакоместо
_delay_loop_2(50000);

WriteData(buffer0[0]); // запись данных
WriteData(buffer0[1]);

FontResticle(0x82);
_delay_loop_2(50000);

WriteData(buffer1[0]);
WriteData(buffer1[1]);

//2

dat0 = DDRA;
dat1 = 0x34; // для проверки вывода данных на жк панель

sprintf(buffer0,"%02x",dat0);
sprintf(buffer1,"%02x",dat1);

FontResticle(0x80);
_delay_loop_2(50000);


WriteData(buffer0[0]);
WriteData(buffer0[1]);

FontResticle(0x82);
_delay_loop_2(50000);

WriteData(buffer1[0]);
WriteData(buffer1[1]);

goto goro;

return (0);

}

void init_lcd()
{
WriteCondition(0x03);//1
WriteCondition(0x03);//2
WriteCondition(0x03);//3
WriteCondition(0x02);//4
WriteCondition(0x02);//5
WriteCondition(0x08);//6
WriteCondition(0x00);//7
WriteCondition(0x08);//8
WriteCondition(0x00);//9
WriteCondition(0x01);//10
WriteCondition(0x00);//11
WriteCondition(0x06);//12
WriteCondition(0x00);//13
WriteCondition(0x0f);//14
}

void WriteCondition(unsigned char data)// для настройки жк
{
data=data+0x20;
PORTD=data;
_delay_loop_2(50000);
_delay_loop_2(50000);
data=data-0x20;
PORTD=data;
_delay_loop_2(50000);
_delay_loop_2(50000);
}

void FontResticle(char data)//знакоместо
{
char data2=data;
data2=data2>>4;
data2=data2&0x0f;
data2=data2+0x20;
PORTD=data2;
_delay_loop_2(50000);
data2=data2-0x20;
PORTD=data2;
_delay_loop_2(50000);

data2=data;
data2=data2&0x0f;
data2=data2+0x20;
PORTD=data2;
_delay_loop_2(50000);
data2=data2-0x20;
PORTD=data2;
_delay_loop_2(50000);
}

void WriteData(char data) //вывод данных
{

char data2=data;
data2=data2>>4;
data2=data2&0x0f;
data2=data2+0x30;
PORTD=data2;
_delay_loop_2(50000);
data2=data2-0x20;
PORTD=data2;
_delay_loop_2(50000);

data2=data;
data2=data2&0x0f;
data2=data2+0x30;
PORTD=data2;
_delay_loop_2(50000);
data2=data2-0x20;
PORTD=data2;
_delay_loop_2(50000);
}
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 16 2007, 16:45
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Чип-Хрум, у Вас второе нарушение - длинные тексты следует аттачить к сообщению в виде файлов.
По существу.
Сразу бросилось в глаза обилие sprintf. Они, как известно, хорошо потребляют стек.
Поэтому последуйте совету - напишите простенькую тестовую программу для проверки DDRB/PORTB без всяких наворотов. Или замените sprintf на собственную функцию попроще.
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 16 2007, 18:45
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



То Чип-Хрум:

Это немного упрощеный вариант вашей программы, найдите ошибку.

Код
#include <stdio.h>

char dat1 = 0xFF;
char buffer0[2],buffer1[2];

int main(void)
{
    sprintf(buffer0,"%02x",dat1);

    for (;;);
}


Анатолий.

Сообщение отредактировал aesok - Apr 16 2007, 18:55
Go to the top of the page
 
+Quote Post
bzx
сообщение Apr 16 2007, 23:30
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



2 aesok
Очень хороший прмер. Как и предполагал IgorKossak, именно в sprintf собака зарыта


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 16 2007, 23:56
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



aesok, зачем глумиться над человеком, ткнули бы сразу пальцем. Он ведь наверняка самостоятельно не поймет намека и примет ваше сообщение за насмешку.
Чип-Хрум, функция sprintf при вашем использовании выводит ТРИ символа в выделенный вами массив размером ДВА байта. Третим является завершающий строку преобразования символ NULL (0x00).
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 17 2007, 00:22
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(rezident @ Apr 16 2007, 23:56) *
aesok, зачем глумиться над человеком, ткнули бы сразу пальцем. Он ведь наверняка самостоятельно не поймет намека и примет ваше сообщение за насмешку.
Чип-Хрум, функция sprintf при вашем использовании выводит ТРИ символа в выделенный вами массив размером ДВА байта. Третим является завершающий строку преобразования символ NULL (0x00).


Потомучто найдя ответ на этот вопрос человек чемуто научиться бы.

И еще, результатом функции "sprintf" будет строка "FFFF" если программа откомпилированна без ключа "-funsigned-char", и "FF" если с ним.

Анатолий.

Сообщение отредактировал aesok - Apr 17 2007, 00:28
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 17 2007, 07:24
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Интересно,как это у аффтара,как он утверждает,это прога в студии работала?не настолько там плохой
симулятор,такое симулируется без вопросов.
2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 17 2007, 07:48
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(WHALE @ Apr 17 2007, 10:24) *
2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.

Я тоже не очень большой знаток, но в ASCII NULL имеет значение 0. Хотя конечно никто не мешает переопределить этот символ. ОК, скорректирую свое сообщение. sprintf формирует строку символов, в конце которой будет символ со значением 0. И, например, 'A' не то же самое, что "A". Т.к. 'A' это символ, имеющий значение 0x41, а "A" это строка из двух символов 0x41 и 0x00. Впрочем Керниган и Ричи написали это задолго до меня и в более доступной для понимания форме smile.gif
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016