Skocz do zawartości

Atmega8, masa pytań początkującego


komanche

Pomocna odpowiedź

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?

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

?!?!?!?!

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:


$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:

$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 😉

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Takie coś?

$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:

$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)?

Link do komentarza
Share on other sites

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.

  • Lubię! 1
Link do komentarza
Share on other sites

czyli dioda=1 oznacza świecącą się diodę a nie jak ktoś mi kiedyś wmówił zgaszoną?

$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:

$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 ;]

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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.

  • Lubię! 2
Link do komentarza
Share on other sites

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 ]

$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

Link do komentarza
Share on other sites

Zrób tak:

$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.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.