7 сегментный индикатор + 74hc595 + atmega 8

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение pyzhman »

alex38779 писал(а):Как повысить быстродействие кода.
Писать ассеблерные вставки для узких мест. И вылизывать, вылизывать, вылизывать.
Docendo discimus
Реклама
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

pyzhman писал(а): Писать ассеблерные вставки для узких мест.
С ассмом у меня туговато. Но можно попробовать...


Еще вопрос. Читал про конечные автоматы, у меня будут релюхи которые будут зависеть от многих условий... Хочу сделать обработку их вот так:
В кейсах по очереди будут проверятся состояние релюх и делаться действия если нужно..

Код: Выделить всё

void use_rele(){
  uint8_t status = 0;
  switch(status){
    case 0:       /*rele 1*/
      f_rele_1();
      status = 1;
    break;
    case 1:       /*rele 2*/
      f_rele_2();
      status = 2;
    break;
    case 2:       /*rele 3*/
      f_rele_3();
      status = 3;
    break;
    case 3:       /*rele 4*/
      f_rele_4();
      status = 0;
    break;
  }
}
И запихнуть это в главный цикл. кнопки и индикация будут обрабатываться в прерывании. Как на такое смотрите? :))
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение ARV »

alex38779 писал(а):Как на такое смотрите?
глазами пока смотрим.

оно бы все нормально, но ощущение такое, что у вас последовательно вызываются f_rele_1() ... f_rele_4() - какой смысл в конечном автомате?
чтобы работало так, как вы написали, переменная status должна быть объявлена static

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

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

без static похоже будет только f_rele_1();
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

С этим разобрался)

Подскажите совместимый мк с атмегой 8? Боюсь памяти не хватит мне...
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение WiseLord »

168/328 по ножкам совместимы.
Реклама
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

потихоньку пилю код... и возникают вопросы. будет много константных значений, то есть настройки которыми можно будет восстановить устройство к изначальной настройке. где их лучше хранить в eeprom либо объявить как константы?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение pyzhman »

Константы объявите как константы.
Docendo discimus
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

столкнулся с такой ошибкой в протеусе, шлю данные на 595 регистр, контроллер atmega8. появляется иногда и неожиданно. что делать с ней? или это осяк шпротеуса?
Изображение

код отправки такой, убирал задержки, не помогло, ставил разные то же самое.

Код: Выделить всё

void send_spi(uint8_t n12, uint8_t n21){
  PORTB &= ~(1<<0);
  SPDR = n21;
  while(!(SPSR &(1<<SPIF)));
  _delay_us(200);
  SPDR = n12;
  while(!(SPSR &(1<<SPIF)));
  _delay_us(200);
  PORTB |= (1<<0);
}
настройка спи

Код: Выделить всё

SPCR = 0b01110011;
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

вывод SS на выход настроен?
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

вот схема
Изображение

настройка порта

Код: Выделить всё

DDRB |= (1<<0) | (0<<1) | (0<<2) | (1<<3) | (1<<4) | (1<<5) | (0<<6) | (0<<7);
  PORTB |= (1<<1) | (1<<2) | (1<<6) | (1<<7);
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

SS это PB2 настроен похоже на вход, из документации:
Master Mode When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the
direction of the SSpin.
If SSis configured as an output, the pin is a general output pin which does not affect the SPI
system. Typically, the pin will be driving the SSpin of the SPI Slave.
If SSis configured as an input, it must be held high to ensure Master SPI operation. If the SSpin
is driven low by peripheral circuitry when the SPI is configured as a Master with the SSpin
defined as an input, the SPI system interprets this as another Master selecting the SPI as a
Slave and starting to send data to it.
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

oleg110592 писал(а):SS это PB2 настроен похоже на вход, из документации:
Блин что бы я без Вас делал Олег) :) Спасибо, заработало)
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение Serhio »

Здравствуйте. Подскажите пожалуйста следующие:
1). Строчка
SPCR= 0<<SPIE | 1<<SPE | 1<<DORD | 1<<MSTR | 0<<CPOL | 0<<CPHA | 1<<SPR1 | 1 <<SPR0;
Можно ли её просто записать так? Эти строки эквиваленты? Или в этих сложностях что-то кроется :) ?
SPCR= 0b01110011

2). В даташите на мегу8 есть пример
UCSRB=(1<<RXEN)|(1<<TXEN);
Если я правильно понял – это значит выставить бит RXEN в регистре UCSRB в единицу?!
И - бит ТXEN в регистре UCSRB в единицу?! Тогда почему не записывается это так:
UCSRB I=(1<<RXEN)|(1<<TXEN); (со значком логического поразрядного или)

3). Так же в даташите есть строка
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
Что значит (3<<UCSZ0 )??? Нашел, что это эквивалентно умножению на 8. Можно ли поподробнее про эту строчку? Умножить весь регистр UCSRC на 8 (на 0000 1000) ? Тогда зачем установка URSEL и TXEN в единицу?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение WiseLord »

1. Записать SPCR= 0b01110011 можно, но эта запись плоха тем, что непонятно, что происходит, и для разъяснения нужно лезть в даташит, смотреть описание битов регистра SPCR. Тогда как первый вариант сразу же даёт понять, какой бит во что устанавливается. Но и в первом варианте надо бы скобки расставить.

2. Тут не совсем понял вопроса, так как толком не увидел разницы.
UCSRB=(1<<RXEN)|(1<<TXEN) - это не только значит выставить биты RXEN и TXEN в единицу. Это ещё и устанавливает в 0 другие биты этого регистра
А вот в случае UCSRB |= (1<<RXEN)|(1<<TXEN) затрагиваются только эти два бита.

3. (3<<UCSZ0) = это не умножение на 8. Это сдвиг числа 3 (0b00000011) на UCSZ0 (=1) позиций влево.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение Serhio »

3. (3<<UCSZ0) = это не умножение на 8. Это сдвиг числа 3 (0b00000011) на UCSZ0 (=1) позиций влево.

Тут возникло еще больше вопросов.
1. Откуда нам известно, что "UCSZ0 =1", а не 0 ?
2. Тогда 1<<RXEN - это сдвиг числа 1 на RXEN позиций влево ? или это не так?
3. Равносильна ли запись "... (3<<UCSZ0)" этой - "...(1<<UCSZ0)I(1<<UCSZ1)". Как я понимаю это так сделали для сокращения записи в регистр UCSRC ?

Прошу прощения за занудство)))
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

1) из хидера iom8.h
/* UCSRC */
#define URSEL 7
#define UMSEL 6
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
#define UCPOL 0

2) так, из того же хидера видно чему равен RXEN: #define RXEN 4

3) равносильна, два бита рядом - почему бы и нет
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение Serhio »

Теперь все понятно))
Спасибо большое за ответы))) :) .
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Понадобилось мне преобразовать переменные. uint8_t в uint16_t.

Пишу на си. А там вычитал про этот способ (тип)переменная. Т.е. (uint16_t)data . Будет ли так работать?

Есть функция которая принимает аргумент uint16, а мне нужно передать uint8 в нее. Или функция пережуют без преобразования?
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение СКАЗОЧНИК »

не хочу создавать новую тему, поэтому спрошу здесь, тем более похожая тема.

Есть регистр 74НС595. Если я у него вывод ST_CP тупо при разводке платы посажу (подтяну) к плюсу сразу. А данные буду слать на него как обычно, будет работать?

Почему спрашиваю? Потому что у меня на данный момент не пашет. Думаю где ошибку искать. :)

З.Ы. Уже подумал на этот вывод сделать цепь начального сброса при включении, как на РЕЗЕТ у АВР.

:facepalm: :facepalm: :facepalm: Похоже нашел... Без защелки действительно работать не хочет.
Станислав
Ответить

Вернуться в «AVR»