Witam,
Wykonałem na module uruchomieniowym Atmega ver. 2 sterownik do dwóch unipolarnych silników krokowych. Na porcie A Atmegi podpiąłem mikrostyki, port B połączyłem z układem ULN2803, wyjścia ULN2803 podpiąłem do silników krokowych.
Kiedy naciskałem mikrostyk, na port B wyprowadzana była sekwencja, która obracała silnikiem krokowym do momentu zwolnienia przycisku. Zaprogramowałem tak cztery przyciski, odpowiednio lewo/prawo dla każdego silnika krokowego.
Wszystko działało. Program zamieszczam poniżej, może komuś się przyda.
Problem pojawił się w miejscu, kiedy chciałem przenieść wszystko na płytkę uniwersalną. Układ składa się z zasilacza 12V 1.25A, Atmegi16, dwóch ULN2803 i stabilizatora napięcia LM7805. Po naciśnięciu mikrostyku nic się nie dzieje
Poniżej zamieszczam obrazek wykonanych połączeń.
Wydawało mi się, że wszystko jest OK, ale skoro nie działa to gdzieś musiałem popełnić błąd. Zmierzone napięcie z LM7805 do Vcc i AVcc Atmegi16 wynosi 4,8V.
Może gdzieś nie chce stykać kabelek? Może przenieść od razu to wszystko na płytkę uniwersalną?
Wykonałem na module uruchomieniowym Atmega ver. 2 sterownik do dwóch unipolarnych silników krokowych. Na porcie A Atmegi podpiąłem mikrostyki, port B połączyłem z układem ULN2803, wyjścia ULN2803 podpiąłem do silników krokowych.
Kiedy naciskałem mikrostyk, na port B wyprowadzana była sekwencja, która obracała silnikiem krokowym do momentu zwolnienia przycisku. Zaprogramowałem tak cztery przyciski, odpowiednio lewo/prawo dla każdego silnika krokowego.
Wszystko działało. Program zamieszczam poniżej, może komuś się przyda.
.include"m32def.inc"
.cseg
.org 0
.def acc=r16
.def delay=r17
.def delay1=r18
.def delay2=r19
ldi acc,HIGH(RAMEND) ; Definicja stosu
out SPH,acc
ldi acc,LOW(RAMEND)
out SPL,acc
Main:
ldi acc,0b00000000
out DDRA,acc ;wszystkie bity jako wejscie
ldi acc,0b11111111
out PORTA,acc ;wszystkie wejscia w stanie wysokim
out DDRB, acc ;wszystkie bity jako wyjscia
ldi acc,0b11111111 ;wszystkie diody wylaczone
out PORTB,acc
Odczyt:
in acc, pina
sbrs acc, 7
rjmp kombinacja1
sbrs acc, 6
rjmp kombinacja2
sbrs acc, 5
rjmp kombinacja3
sbrs acc, 4
rjmp kombinacja4
ldi acc,0b11111111 ;wszystkie diody wylaczone
out PORTB,acc
rjmp Odczyt
Kombinacja1:
ldi acc,0b01101111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11001111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b10011111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b00111111
out PORTB,acc
ldi delay,0x01
rcall delayms
rjmp odczyt
Kombinacja2:
ldi acc,0b00111111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b10011111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11001111
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b01101111
out PORTB,acc
ldi delay,0x01
rcall delayms
rjmp Odczyt
Kombinacja3:
ldi acc,0b11110110
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11111100
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11111001
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11110011
out PORTB,acc
ldi delay,0x01
rcall delayms
rjmp Odczyt
Kombinacja4:
ldi acc,0b11110011
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11111001
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11111100
out PORTB,acc
ldi delay,0x01
rcall delayms
ldi acc,0b11110110
out PORTB,acc
ldi delay,0x01
rcall delayms
rjmp Odczyt
delayms: ;poczatek podprogramu
ldi delay1,0xee
dloop2:
ldi delay2,0xdd ;wykonanie petli 255 razy
dloop1:
dec delay2 ;t=1/fx255
brne dloop1
dec delay1 ;t=1/fx255x255
brne dloop2
dec delay
brne delayms
ret
Problem pojawił się w miejscu, kiedy chciałem przenieść wszystko na płytkę uniwersalną. Układ składa się z zasilacza 12V 1.25A, Atmegi16, dwóch ULN2803 i stabilizatora napięcia LM7805. Po naciśnięciu mikrostyku nic się nie dzieje

![[Atmega16]Sterownik silnika krokowego nie chce działać [Atmega16]Sterownik silnika krokowego nie chce działać](https://obrazki.elektroda.pl/4622524600_1311079056_thumb.jpg)
Wydawało mi się, że wszystko jest OK, ale skoro nie działa to gdzieś musiałem popełnić błąd. Zmierzone napięcie z LM7805 do Vcc i AVcc Atmegi16 wynosi 4,8V.
Może gdzieś nie chce stykać kabelek? Może przenieść od razu to wszystko na płytkę uniwersalną?