Перейти к содержанию
    

Незнаю уже на что грешить .

Короче : п.о. 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:

Автор не упомяну ничего о софте каторый дается в приложении что он

нихира не рабочий , глючный , и еще галимый.

А также механизм прерываний описан неправильно!!! :maniac:

Я уже не говорю про те жыдкие программные примеры для микроконтроллеров

каторые этот чудак на букву МММ дает.

У меня ВСЕ!

Добрые люди !!!Подскажите ламеру где он не прав !!!

:help::help::help:

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


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

1. Если Вы смотрели в описании таблицу Register Summary, то могли увидеть, что DDRB доступен не только как регистр внутренней периферии, но и как ячейка памяти с адресом $37. Естественно, при записи в эту ячейку любого значения, оно же будет записано в регистр.

2. Тон сообщения желательно помягче, здесь не политический форум и не телесистемы.

Подскажите ламеру где он не прав !!!

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


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

2 Чип-Хрум , я бы советовал бы вам сначала написать программку банального мигания лапками 0-1-0-1-...

А потом уже подымать шум...С такими глюками не встречался - всё работало как часы..Скорее это ляп в программе или битый камень..

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


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

Я это прекрасно понимаю! На ассемблере я си просматривал ,в программе проблемм нет,

при отладке проблемм нет, они появляются только когда чип сидит в седле и

начинает мне показывать то что я не просил.

Я прошу советы по существу!!!

Где я не прав там не прав , а где прав там уж извините!

Изменено пользователем Чип-Хрум

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


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

Я это прекрасно понимаю! На ассемблере я си просматривал ,в программе проблемм нет,

при отладке проблемм нет, они появляются только когда чип сидит в седле и

начинает мне показывать то что я не просил.

Я прошу советы по существу!!!

Где я не прав там не прав , а где прав там уж извините!

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

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


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

2 Чип-Хрум - ответ по существу -

1) попробуйте заменить камень

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

Это конечно при условии что в программе ляпов нет :) (есть такая народная мудрость - семь раз отмерь 1 раз отреж...)

Изменено пользователем Kuzmi4

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


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

жыдкие

У Вас ошЫбка в программе "Жи Ши" пиши с буквой "И".

Приводите тест программы и map файл.

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


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

серия 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);

}

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


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

Чип-Хрум, у Вас второе нарушение - длинные тексты следует аттачить к сообщению в виде файлов.

По существу.

Сразу бросилось в глаза обилие sprintf. Они, как известно, хорошо потребляют стек.

Поэтому последуйте совету - напишите простенькую тестовую программу для проверки DDRB/PORTB без всяких наворотов. Или замените sprintf на собственную функцию попроще.

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


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

То Чип-Хрум:

 

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

 

#include <stdio.h>

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

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

    for (;;);
}

 

Анатолий.

Изменено пользователем aesok

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


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

2 aesok

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

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


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

aesok, зачем глумиться над человеком, ткнули бы сразу пальцем. Он ведь наверняка самостоятельно не поймет намека и примет ваше сообщение за насмешку.

Чип-Хрум, функция sprintf при вашем использовании выводит ТРИ символа в выделенный вами массив размером ДВА байта. Третим является завершающий строку преобразования символ NULL (0x00).

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


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

aesok, зачем глумиться над человеком, ткнули бы сразу пальцем. Он ведь наверняка самостоятельно не поймет намека и примет ваше сообщение за насмешку.

Чип-Хрум, функция sprintf при вашем использовании выводит ТРИ символа в выделенный вами массив размером ДВА байта. Третим является завершающий строку преобразования символ NULL (0x00).

 

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

 

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

 

Анатолий.

Изменено пользователем aesok

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


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

Интересно,как это у аффтара,как он утверждает,это прога в студии работала?не настолько там плохой

симулятор,такое симулируется без вопросов.

2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.

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


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

2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.

Я тоже не очень большой знаток, но в ASCII NULL имеет значение 0. Хотя конечно никто не мешает переопределить этот символ. ОК, скорректирую свое сообщение. sprintf формирует строку символов, в конце которой будет символ со значением 0. И, например, 'A' не то же самое, что "A". Т.к. 'A' это символ, имеющий значение 0x41, а "A" это строка из двух символов 0x41 и 0x00. Впрочем Керниган и Ричи написали это задолго до меня и в более доступной для понимания форме :)

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

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

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

×
×
  • Создать...