Кто может программировать под микроконтроллеры (ATMega8)?

Разговоры ни о чём

Модератор: vadim64

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Кто может программировать под микроконтроллеры (ATMega8)?

Непрочитанное сообщение ksvserega » 2010-05-20 14:47:41

Есть на сайте такие? Нужна помощь по програмке

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ProFTP » 2010-05-20 21:07:19

у парадокса спросите
http://forum.lissyara.su/memberlist.php ... ile&u=5805
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Гость
проходил мимо

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение Гость » 2010-05-20 22:31:19

точно знаю что парадокс под контроллеры не пишет
парадокс вообще мало чего пишет
так что не надо на него стрелки кидать
идите на вебланц нет

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ProFTP » 2010-05-20 23:28:24

ksvserega писал(а):Есть на сайте такие? Нужна помощь по програмке
огласите стоимость, чтоли? :-D
Гость писал(а):точно знаю что парадокс под контроллеры не пишет
это какой-то децкий микроконтроллер, сложный чтоли? :)

там же все тоже самое СИшное
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
E-Wind
сержант
Сообщения: 155
Зарегистрирован: 2008-05-14 16:19:54
Откуда: Санкт-Петербург

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение E-Wind » 2010-05-20 23:41:19

Оффтоп / я бы спросил на робофоруме или специализированном по электронике...

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ksvserega » 2010-05-21 13:05:24

Есть уже готовая рабочая программка на ассемблере, пытаюсь в ней разобраться, пока с переменным успехом. Т.е. сама математика, сам алгоритм расковырял, а застопорился касательно самого МК. Вот код программы http://woofer.nm.ru/taho/taho_m8.asm . Программа вот для этого тахометра http://woofer.nm.ru/taho/taho_m8.gif
Есть хороший эмулятор электросхем Proteus, вот я в нём всё и ганяю (но есть и собранный в железе рабочий экземпляр). Застрял вот на чем: при пропадании на входных импульсов МК запоминает последнее значение и не гасит светляки. В самом коде при этом ганяется до бесконечности вот эти 2-е строки

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

l2:            sbis  pinb,1
               rjmp  l2
Для выхода из цикла что-то (или кто-то) должен установить 1-й бит pinb. Как этот бит ставится??? :st:

Аватара пользователя
E-Wind
сержант
Сообщения: 155
Зарегистрирован: 2008-05-14 16:19:54
Откуда: Санкт-Петербург

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение E-Wind » 2010-05-21 14:00:42

Насколько я понял из быстрого чтения доков и гугла - pinb - регистр только для чтения для порта B

http://easyelectronics.ru/avr-uchebnyj- ... yvoda.html

sbi x,y - устанавливает бит номер y в единицу (только надо посмотреть datasheet (ДШ) на тему, от нуля ли они считаются)
cbi x,y - сбрасывает

По коду с первым битом порта B (первой от нуля ножкой) :oops: работаем начиная с l5:

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

l5:            clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1               <--------- здесь случайно не SBI должно быть?
               ldi   YH,high(25000)
               ldi   YL,low(25000)
               rcall l8
               brtc  l6
               sbi   portb,0
               ldi   YH,high(12500)
               ldi   YL,low(12500)
Для выхода из цикла что-то (или кто-то) должен установить 1-й бит pinb. Как этот бит ставится???
На выходных восстановлю у себя протеус, можете выложить в нем проект куда-нибудь?

// Сам только-только начинаю осваивать МК )

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ksvserega » 2010-05-21 14:19:57

Листинг программы правильный, лично генерил из него hex и загонял в симулятор и в железо - работает как надо.
Дело в том, что при наличии на входе импульсов прога некоторое кол-во раз крутится на этих 2-х строках, а затем идет дальше. При пропадании вх. импульсов происходит зацикливание.
Проект могу кинуть мылом.

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение BlackCat » 2010-05-21 15:32:54

ksvserega, вам необходимо, что бы после пропадания сигнала на входе, гасла вся линейка диодов?

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ksvserega » 2010-05-21 15:52:18

BlackCat, совершенно верно, скажем если в течение 0,5-1сек нет вх. сигнала - гасить все диоды. При появлении сигнала - снова запуск.
Может как-то режим sleep прикрутить? От тока как потом МК будить - я не умею.

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение BlackCat » 2010-05-24 10:09:21

Сразу после:

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

l3:            sbic  pinb,1
               rjmp  l3
дописать:

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

               clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1
что бы получилось:

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

l3:            sbic  pinb,1
               rjmp  l3
               clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1
               rjmp  l2
l4:            clr   r16
               out   TCCR1B,r16
Из побочных последствий - диоды начнут светиться тускло. Что бы избежать такого эффекта потребуется ввести дополнительный счётчик и по его показаниям выключать индикацию.

P.S. Рекомендую заглянуть сюда: AVR Products - AVR Solutions - Datasheets и скачать Datasheet на нужный чип - ATMEL пишет очень качественную документацию.

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ksvserega » 2010-05-25 15:49:47

Победил таки. Кому интересно, вот код

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

.device ATmega8
.include "m8def.inc"
  
.cseg 
.org $0000     rjmp  l1
.org $0008     rjmp  l4
.org $0012     rjmp  l1
#define XTAL                        1000000 
#define DELAY_ONE_MILLISECOND (XTAL / 4 / 1000) 
l1:            ldi   r16,high(RAMEND)
               out   SPH, r16
               ldi   r16,low(RAMEND)
               out   SPL,r16
               ser   r16
               out   ddrb,r16
               out   ddrc,r16
               out   ddrd,r16
               cbi   ddrb,1 
			                           
               ldi   r16,$04
               out   TIMSK,r16
               ldi   XH,high(65535)
               ldi   XL,low(65535)

               in    XL,TCNT1L
               in    XH,TCNT1H
               rcall l5

               clr r16
               ldi r16, (1<<WDCE)|(1<<WDE)
               out WDTCR, r16
               ldi r16, (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0)
               out WDTCR, r16
               wdr

               ldi r24,LOW(1000)
               ldi r25,HIGH(1000)
               rcall mswait
               wdr
               clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1

               out   TCNT1H,r16
               out   TCNT1L,r16
               ldi   r16,2
               out   TCCR1B,r16
               sei
l2:            sbis  pinb,1
               rjmp  l2
               wdr
               clr   r16
               out   TCCR1B,r16
               in    XL,TCNT1L
               in    XH,TCNT1H
               rcall l5
               clr   r16
               out   TCNT1H,r16
               out   TCNT1L,r16
               ldi   r16,2
               out   TCCR1B,r16
l3:           sbic  pinb,1
               rjmp  l3
               rjmp  l2
l4:           clr   r16
               out   TCCR1B,r16
               ser   r16
               out   TCNT1H,r16
               out   TCNT1L,r16
               reti
l5:           clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1
               ldi   YH,high(25000)
               ldi   YL,low(25000)
               rcall l8
               brtc  l6
               sbi   portb,0
               ldi   YH,high(12500)
               ldi   YL,low(12500)
               rcall l8
               brtc  l6
               sbi   portd,7
               ldi   YH,high(8333)
               ldi   YL,low(8333)
               rcall l8
               brtc  l6
               sbi   portd,6
               ldi   YH,high(6250)
               ldi   YL,low(6250)
               rcall l8
               brtc  l6
               sbi   portd,5
               ldi   YH,high(5000)
               ldi   YL,low(5000)
               rcall l8
               brtc  l6
               sbi   portb,7
               ldi   YH,high(4167)
               ldi   YL,low(4167)
               rcall l8
               brtc  l6
               sbi   portb,6
               ldi   YH,high(3571)
               ldi   YL,low(3571)
               rcall l8
               brtc  l6
               sbi   portd,4
               ldi   YH,high(3125)
               ldi   YL,low(3125)
               rcall l8
               brtc  l6
               sbi   portd,3 
               ldi   YH,high(2778)
               ldi   YL,low(2778)
               rcall l8
l6:            brtc  l7
               sbi   portd,2
               ldi   YH,high(2500)
               ldi   YL,low(2500)
               rcall l8
               brtc  l7
               sbi   portd,1
               ldi   YH,high(2273)
               ldi   YL,low(2273)
               rcall l8
               brtc  l7
               sbi   portd,0
               ldi   YH,high(2083)
               ldi   YL,low(2083)
               rcall l8
               brtc  l7
               sbi   portc,5
               ldi   YH,high(1923)
               ldi   YL,low(1923)
               rcall l8
               brtc  l7
               sbi   portc,4
               ldi   YH,high(1786)
               ldi   YL,low(1786)
               rcall l8
               brtc  l7
               sbi   portc,3
               ldi   YH,high(1667)
               ldi   YL,low(1667)
               rcall l8
               brtc  l7
               sbi   portc,2
               ldi   YH,high(1563)
               ldi   YL,low(1563)
               rcall l8
               brtc  l7
               sbi   portc,1
               ldi   YH,high(1471)
               ldi   YL,low(1471)
               rcall l8
               brtc  l7
               sbi   portc,0
               ldi   YH,high(1389)
               ldi   YL,low(1389)
               rcall l8
               brtc  l7
               sbi   portb,5
               ldi   YH,high(1316)
               ldi   YL,low(1316)
               rcall l8
               brtc  l7
               sbi   portb,4
               ldi   YH,high(1250)
               ldi   YL,low(1250)
               rcall l8
               brtc  l7
               sbi   portb,3
               ldi   YH,high(1190)
               ldi   YL,low(1190)
               rcall l8
               brtc  l7
               sbi   portb,2
l7:            ret
l8:            clt
               cp    XH,YH
               brlo  l9
               cp    XH,YH
               brne  l10
               cp    XL,YL
               brsh  l10                  
l9:            set
l10:           ret
mswait: 
       	   sbiw    r24, 1                        
        	   brcc    mswait1                               
        	   ret                                      
mswait1: 
        	   nop 
        	   ldi     r26, low(DELAY_ONE_MILLISECOND -4)  
        	   ldi     r27, high(DELAY_ONE_MILLISECOND -4) 
mswait2: 
        	   sbiw    r26, 1                                 
        	   brne    mswait2                            
        	   rjmp    mswait    

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение BlackCat » 2010-05-26 8:32:39

ksvserega писал(а):Победил таки. Кому интересно, вот код
Использовать сторожевой таймер для сброса - интересная мысль. А зачем после установки таймера используется задержка?
=====
Ещё можно немного почистить код от "пустых" инструкций, но это уже придирки.

ksvserega
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-11-28 9:57:49
Откуда: Донецк
Контактная информация:

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение ksvserega » 2010-05-26 9:47:15

BlackCat , хорошее замечание, радостный был, чуток не тот код сбросил, вот правильный код продцедуры l1

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

l1:            ldi   r16,high(RAMEND)
               out   SPH, r16
               ldi   r16,low(RAMEND)
               out   SPL,r16
               ser   r16
               out   ddrb,r16
               out   ddrc,r16
               out   ddrd,r16
               cbi   ddrb,1 

               clr r16
               ldi r16, (1<<WDCE)|(1<<WDE)
               out WDTCR, r16
               ldi r16, (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0)
               out WDTCR, r16
               wdr                                    

               ldi   r16,$04
               out   TIMSK,r16
               ldi   XH,high(65535)
               ldi   XL,low(65535)
               in    XL,TCNT1L
               in    XH,TCNT1H
               rcall l5
               ldi r24,LOW(1000)
               ldi r25,HIGH(1000)
               rcall mswait
               wdr

               clr   r16
               out   portb,r16
               out   portc,r16
               out   portd,r16
               cbi   portb,1

               out   TCNT1H,r16
               out   TCNT1L,r16
               ldi   r16,2
               out   TCCR1B,r16
               sei
При вкл. девайса на 1сек загораются все светляки (для этого и нужна задержка). Если сигнала на входе нет, то прога крутится вокруг

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

l2:            sbis  pinb,1
               rjmp  l2
, через 2сек собака сбрасывает проц. При отсутсвии сигнала получается 1сек светляки горят, 2 сек не горят, 1сек горят, 2сек не горят, и так до тех пор, пока не появится вх. сигнал.

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение BlackCat » 2010-05-26 11:06:25

Теперь понятно, сразу не заметил инструкций, которые устанавливают максимальное значение в регистре.

__XeNoN__
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-03-12 22:00:27

Re: Кто может программировать под микроконтроллеры (ATMega8)

Непрочитанное сообщение __XeNoN__ » 2010-06-02 23:56:04

Блин, если и писать на ASM'е, то надо хотя бы коментарии оставлять. Пока въехал, думал мозг сломаю. :smile: