Страница 1 из 1

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

Добавлено: 2010-05-20 14:47:41
ksvserega
Есть на сайте такие? Нужна помощь по програмке

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

Добавлено: 2010-05-20 21:07:19
ProFTP
у парадокса спросите
http://forum.lissyara.su/memberlist.php ... ile&u=5805

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

Добавлено: 2010-05-20 22:31:19
Гость
точно знаю что парадокс под контроллеры не пишет
парадокс вообще мало чего пишет
так что не надо на него стрелки кидать
идите на вебланц нет

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

Добавлено: 2010-05-20 23:28:24
ProFTP
ksvserega писал(а):Есть на сайте такие? Нужна помощь по програмке
огласите стоимость, чтоли? :-D
Гость писал(а):точно знаю что парадокс под контроллеры не пишет
это какой-то децкий микроконтроллер, сложный чтоли? :)

там же все тоже самое СИшное

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

Добавлено: 2010-05-20 23:41:19
E-Wind
Оффтоп / я бы спросил на робофоруме или специализированном по электронике...

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

Добавлено: 2010-05-21 13:05:24
ksvserega
Есть уже готовая рабочая программка на ассемблере, пытаюсь в ней разобраться, пока с переменным успехом. Т.е. сама математика, сам алгоритм расковырял, а застопорился касательно самого МК. Вот код программы 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:

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

Добавлено: 2010-05-21 14:00:42
E-Wind
Насколько я понял из быстрого чтения доков и гугла - 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. Как этот бит ставится???
На выходных восстановлю у себя протеус, можете выложить в нем проект куда-нибудь?

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

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

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

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

Добавлено: 2010-05-21 15:32:54
BlackCat
ksvserega, вам необходимо, что бы после пропадания сигнала на входе, гасла вся линейка диодов?

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

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

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

Добавлено: 2010-05-24 10:09:21
BlackCat
Сразу после:

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

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 пишет очень качественную документацию.

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

Добавлено: 2010-05-25 15:49:47
ksvserega
Победил таки. Кому интересно, вот код

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

.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    

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

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

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

Добавлено: 2010-05-26 9:47:15
ksvserega
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сек не горят, и так до тех пор, пока не появится вх. сигнал.

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

Добавлено: 2010-05-26 11:06:25
BlackCat
Теперь понятно, сразу не заметил инструкций, которые устанавливают максимальное значение в регистре.

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

Добавлено: 2010-06-02 23:56:04
__XeNoN__
Блин, если и писать на ASM'е, то надо хотя бы коментарии оставлять. Пока въехал, думал мозг сломаю. :smile: