|
Atmega8, masa pytań początkującego |
| Autor |
Wiadomość |
komanche

Posty: 19 Skąd: Toruń
|
Wysłany: 04 Paź 08 10:02 Atmega8, masa pytań początkującego
|
|
|
Witam!
Ostatnio sprawiłem sobie uC Atmega8 i podstawkę do niego (taaak, wiem! ZASZALAŁEM!).
Zaraz (tzn, gdy mi odpowiecie na trochę pytań) chcę zrobić płytkę która będzie jednocześnie programatorem dla atmegi8 i moim pierwszym układem na tym dziadostwie.
Na razie na temat atmegi8 wyłapałem takie informacje:
-Ma 28 nóżek z tego:
2 zupełnie mi nie przydatne (21, 21 - aref, avcc)
3 od zasilania (7,8,22 - VCC, 2X GND)
4 od programowania (1, 17, 18, 19 - reset, mosi, miso, sck i oczywiście masa)
czyli dziewięć odpada.
Zostaje więc tylko 19.
Tutaj już mniej rozumiem.
Wg. niektórych schematów tylko nóżki 23-28 mogą być wejściem i wyjściem a reszta tylko wyjściem, a wg. innych wszystkie są we/wy (definiowane na starcie programu).
Jak to z tym jest?
Dajmy na to, że wejściem są tylko 23-28, tak je zdefiniowałem w programie (taak, też nie jestem pewien, czy dobrze to robię
"config portc=input")
Wykrywają one napięcie z plusa zasilania i nie potrzebują oporników?
Następne pytanie. Definiuję port D jako wyjście i podłączam leda.
Czy wartość portd.0=1 daje napięcie na nóżce 2 czy może je wyłącza a portd.0=0 podaje napięcie?
Pozdrawiam, Komanche!
P.S.
Tak podłączone będzie dobrze?
 |
|
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 190 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 04 Paź 08 10:08
|
|
|
| Nóżki od programowania nie odpadają. Każda nóżka z wymienionych może być we/wy. |
|
|
|
|
 |
komanche

Posty: 19 Skąd: Toruń
|
Wysłany: 04 Paź 08 10:10
|
|
|
| a stan portx.x=1 to napięcie na nóżce czy jego brak? |
|
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 190 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 04 Paź 08 11:02
|
|
|
To 1. Jeżeli wejście podłącza się ją do plusa, jeżeli wyjście diode w drugą stronę trzeba obrócić i do minusa. Programujesz w bascomie??
[ Dodano: 04 Paź 08 12:04 ]
jeszcze napisałeś 5v z zasilacza komputerowego. Uwarzaj, żebyś nie pomylił z 12V. Poza tym nie polecam tego rozwiązania. Jest ono nawet jak dla mnie stanowczo za niebezpieczne ze względu na obecność 230ACV |
|
|
|
|
 |
komanche

Posty: 19 Skąd: Toruń
|
Wysłany: 04 Paź 08 11:32
|
|
|
?!?!?!?!
Niebezpieczne? Czemu?
Zasilacz mam dobrej klasy, jestem go pewien. No, chyba, że chodzi o coś o czym nie wiem...
Z 12V mi się nie pomyli, spokojna głowa.
Tak, w bascomie - chcę najpierw zobaczyć o co chodzi z tym uC a potem przejdę na C, które już nawet trochę znam ;]
Więc w bascomie robię program taki przykładowy:
| Kod: |
$regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portc=input 'wszystkie piny portuC jako wejście
portc=&B0000000 'stan spoczynkowy 0 cokolwiek to znaczy
config portd=output 'wszystkie piny portuD jako wyjście
portd=&B00000000 'stan spoczynkowy 0 cokolwiek to znaczy
Do 'rozpoczynam pętle
portd.0=0 'zapalam diodę??
wait 2
portd.0=1 'gaszę diodę??
wait 10
portd.0=0 'zapalam??
wait 5
portd.0=1 'gaszę??
waitms 10
portd.0=0
waitms 20
portd.0=1
waitms 30
portd.0=0
waitms 40
portd.0=1
waitms 50
portd.0=0
waitms 60
portd.0=1
waitms 70
portd.0=0
waitms 80
portd.0=1
waitms 90
portd.0=0
waitms 100
portd.0=1
waitms 200
portd.0=0
waitms 300
portd.0=1
waitms 400
portd.0=0
waitms 500
portd.0=1
Loop
end |
oczywiście nie wgram takiego do procka.
Wgram takiego:
| Kod: |
$regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portc=input 'wszystkie piny portuC jako wejście
portc=&B0000000 'stan spoczynkowy 0 cokolwiek to znaczy
config portd=output 'wszystkie piny portuD jako wyjście
portd=&B00000000 'stan spoczynkowy 0 cokolwiek to znaczy
Do 'rozpoczynam pętle
IF zmienna < 2000 Then
portd.0=1
waitms zmienna
portd.0=0
zmienna=zmienna + 10
elseif zmienna >= 2000 Then
zmienna=10
portd.0=1
waitms 500
portd.0=0
waitms 500
endif
Loop
End |
Czy jeśli podłączę diodę do portd.0 dłuższą nóżką do scalaka a krótszą do minusa przez opór to będzie migać? będzie się palić na portd.0=1 czy portd.0=0?
Pozdrawiam!
P.S.
Wiem, że w drugim kodzie zapomniałem zdefiniować zmiennej, ale nie pamiętam jak sie to robi. Przypomnę sobie to poprawie |
|
| Ostatnio zmieniony przez komanche 04 Paź 08 11:33, w całości zmieniany 1 raz |
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 190 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 04 Paź 08 11:45
|
|
|
| Nie przesadzaj za bardzo z gmatwaniem tego kodu. na początek dodaj switcha do d.0 i diode do d.1. Napisz programik z warunkiem if, kiedy to normalnie dioda będzie się świeciła, a po naciśnięciu switcha zgasi się. To na początek. |
|
|
|
|
 |
komanche

Posty: 19 Skąd: Toruń
|
Wysłany: 04 Paź 08 01:18
|
|
|
Takie coś?
| Kod: | $regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portd.0=output 'pin portuD jako wyjście
set portd.0 'stan spoczynkowy 1 cokolwiek to znaczy
config portd.1=input 'pin portuD jako wejście
reset portd.1 'stan spoczynkowy 1 cokolwiek to znaczy
dioda alias portd.0
przycisk alias pind.1
Do 'rozpoczynam pętle
dioda=0 'zapalenie diody
IF przycisk=1 THEN dioda=1 'jeśli przycisk wciśnięty zgaś diodę
ENDIF
Loop
End |
Ja chciałbym zrobić już trochę bardziej skomplikowany:
| Kod: |
$regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portd.0=output 'pin portuD jako wyjście
set portd.0 'stan spoczynkowy 1 cokolwiek to znaczy
config portd.1=input 'pin portuD jako wejście
reset portd.1 'stan spoczynkowy 1 cokolwiek to znaczy
dioda alias portd.0
przycisk alias pind.1
Do 'rozpoczynam pętle
dioda=1 'gaszenie diody
IF przycisk=1 THEN dioda=0 waitms 500 dioda=1 waitms 500 dioda=0 waitms 500
ELSEIF przycisk=0 THEN dioda=0 wait 2 dioda=1 wait 2
ENDIF
Loop
End |
Tak to powinno wyglądać??
Po naciśnięciu przycisku dioda powinna zamrugać szybciej
Schemat jest poprawny? Czy Atmegi można programować wielokrotnie?
Czy nie potrzeba opornika na wejścia układu (na przełączniku)?
|
|
| Ostatnio zmieniony przez komanche 04 Paź 08 01:36, w całości zmieniany 6 razy |
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 190 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 04 Paź 08 01:36
|
|
|
| Co do pierwszego programiku to dioda=0 nie jest potrzebne. W domyśle ustawiłeś stan spoczynkowy na 1 więc cały czas się będie świeciła (jeśli przycisk rozwarty). Co do drugiego to jak nacisniesz przycisk to dioda tylko raz ci zamruga. Będziesz musiał go przytrzymać. Ale ogólnie dobrze. |
|
|
|
|
 |
| Wyświetl szczegóły |
 |
komanche

Posty: 19 Skąd: Toruń
|
Wysłany: 04 Paź 08 02:47
|
|
|
czyli dioda=1 oznacza świecącą się diodę a nie jak ktoś mi kiedyś wmówił zgaszoną?
| Kod: |
$regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portd.0=output 'pin portuD jako wyjście
set portd.0 'stan spoczynkowy 1 cokolwiek to znaczy
config portd.1=input 'pin portuD jako wejście
reset portd.1 'stan spoczynkowy 1 cokolwiek to znaczy
dioda alias portd.0
przycisk alias pind.1
Do 'rozpoczynam pętle
dioda=1 'zapalenie diody
IF przycisk=0 THEN dioda=1 'jeśli przycisk wciśnięty zgaś diodę
ENDIF
Loop
End |
i odpowiednio:
| Kod: | $regfile = "mega8.dat" 'procesor
$crystal = 1000000 'taktowanie
config portd.0=output 'pin portuD jako wyjście
set portd.0 'stan spoczynkowy 1 cokolwiek to znaczy
config portd.1=input 'pin portuD jako wejście
reset portd.1 'stan spoczynkowy 1 cokolwiek to znaczy
dioda alias portd.0
przycisk alias pind.1
Do 'rozpoczynam pętle
dioda=0 'gaszenie diody
IF przycisk=1 THEN dioda=1 waitms 500 dioda=0 waitms 500 dioda=1 waitms 500
ELSEIF przycisk=0 THEN dioda=0 wait 2 dioda=1 wait 2
ENDIF
Loop
End |
Jeszcze jakieś błędy w kodzie (drugim) i schemacie programatoro-migacza?
Jeśli nie, to zaraz zaczynam robić ;]
i jeszcze jedno: da się programować kilka razy ten sam uC? Szkoda mi 6,50 na sprawdzenie, że nie ;] |
|
| Ostatnio zmieniony przez komanche 04 Paź 08 02:56, w całości zmieniany 2 razy |
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 190 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 04 Paź 08 05:51
|
|
|
| To zalezy od tego jaki ustawisz stan spoczynkowy. Jeżeli zwykły czyli zero to dioda=1 - dioda zaświecona. Jeżeli stan spocznkowy ustawisz 1 to dioda=1 - dioda zgaszona. Stanem spoczynkowym jakby odwracasz wszystko. |
|
|
|
|
 |
adriankociński

Posty: 6 Skąd: Radom\trablice
|
Wysłany: 24 Lis 08 06:36
|
|
|
Witam mam takie pytanie dlaczego gdy wpisuje atmega8.dat to pisze że "dat file :mega8.dat ,not found wiecie dlaczego pozdrawiam i czekam na odpowiedzi i wszelkie próby wgrania programu klęska nie reaguje , program go widzi i połączenie jest wiecie czego może być to wina bardzo proszę o pomoc |
|
| Ostatnio zmieniony przez adriankociński 24 Lis 08 06:40, w całości zmieniany 1 raz |
|
|
|
 |
Sabre


Pomógł: 12 razy Posty: 209 Otrzymał 49 piw(a) Skąd: Warszawa
|
Wysłany: 24 Lis 08 06:39
|
|
|
| adriankociński napisał/a: | Witam mam takie pytanie dlaczego gdy wpisuje atmega8.dat to pisze że "dat file :mega8.dat ,not found wiecie dlaczego pozdrawiam i czekam na odpowiedzi |
Dlatego tak jest ponieważ prawidłowo powinno być m8def.dat. |
|
_________________ Gość jeśli pomogłem, postaw piwo. |
|
|
|
 |
| Wyświetl szczegóły |
 |
adriankociński

Posty: 6 Skąd: Radom\trablice
|
Wysłany: 24 Lis 08 06:41
|
|
|
tak właśnie sie domyślałem bo jak tak wpisywałem to dało sie wgrać a co do wgrania programu ????
[ Dodano: 25 Lis 08 06:09 ]
| Kod: | $regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Input
Portb = &B00000000
Config Portd = Output
Portd = &B0000000
Do
debounce pinb.0, 1, wlacz, sub
Loop
Wlacz:
Toggle Portd.0
Return
End |
koledzy po wgraniu takiego programu i podpięciu diody pod procesor nic co źle robię
nio i po takim programowaniu program jest ale nie działa podpoiłem diodę przez rezystor 100uF i nic pod port pd0 czyli nóżkę nr 2
proszę o pomoc i okrzan jeśli się należy
[ Dodano: 26 Lis 08 06:03 ]
nio i po takim programowaniu program jest ale nie działa podpoiłem diodę przez rezystor 100 i nic pod port pd0 czyli nóżkę nr 2
proszę o pomoc i okrzan jeśli się należy |
|
| Ostatnio zmieniony przez adriankociński 25 Lis 08 06:13, w całości zmieniany 1 raz |
|
|
|
 |
mskojon

Pomógł: 1 raz Posty: 47 Otrzymał 3 piw(a) Skąd: Legionowo
|
Wysłany: 30 Lis 08 04:28
|
|
|
Zrób tak:
| Kod: | $regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Input
Portb = &B00000000
Config Portd = Output
Portd = &B0000000
Do
If Pinb.0 = 1 then
Portd.0 = 1
End If
Loop
End |
Microswitcha łączysz do Vcc i Pb.0 (!!!NIE ZAPOMNIJ O DOŁĄCZENIU KONDENSATORA 100nF DO MASY I PB.0!!!), diodę do Vcc i Pd.0 i powinno śmigać Oczywiście mam rozumieć, że gdy wgrywasz program, wtedy Bascom identyfikuje procka?
Pozdrawiam.
Ps. Programator masz źle zrobiony. Mi z pomocą przyszła Elektronika Dla Wszystkich 1/2008 - jest tam opisane wiele typów programatorów w tym DT-006 (którego używam do dziś ) czyli wtyczka i 4 rezystory TUTAJ masz schemat, ja +5v wziąłem z nieużywanego portu PS2 (myszkę mam pod USB ) i wszystko śmiga elegancko. |
|
| Ostatnio zmieniony przez mskojon 30 Lis 08 04:39, w całości zmieniany 2 razy |
|
|
|
 |
|
|