Strona Główna
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy RegulaminRegulamin  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj




Kurs AVR-GCC

Przyszłość jest w naszych rękach...
...bo przyszłość to robotyka.





Poprzedni temat «» Następny temat
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?
Postaw piwo autorowi tego posta
 
 
misiek1994 



Pomógł: 2 razy
Posty: 190
Otrzymał 13 piw(a)
Skąd: z Sędziszowa
Ostrzeżeń:
 1/3/4
Wysłany: 04 Paź 08 10:08   

Nóżki od programowania nie odpadają. Każda nóżka z wymienionych może być we/wy.
Postaw piwo autorowi tego posta
 
 
 
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?
Postaw piwo autorowi tego posta
 
 
misiek1994 



Pomógł: 2 razy
Posty: 190
Otrzymał 13 piw(a)
Skąd: z Sędziszowa
Ostrzeżeń:
 1/3/4
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
Postaw piwo autorowi tego posta
 
 
 
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  
Postaw piwo autorowi tego posta
 
 
misiek1994 



Pomógł: 2 razy
Posty: 190
Otrzymał 13 piw(a)
Skąd: z Sędziszowa
Ostrzeżeń:
 1/3/4
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.
Postaw piwo autorowi tego posta
 
 
 
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  
Postaw piwo autorowi tego posta
 
 
misiek1994 



Pomógł: 2 razy
Posty: 190
Otrzymał 13 piw(a)
Skąd: z Sędziszowa
Ostrzeżeń:
 1/3/4
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.
Postaw piwo autorowi tego posta
 
 
 
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  
Postaw piwo autorowi tego posta
 
 
misiek1994 



Pomógł: 2 razy
Posty: 190
Otrzymał 13 piw(a)
Skąd: z Sędziszowa
Ostrzeżeń:
 1/3/4
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.
Postaw piwo autorowi tego posta
 
 
 
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  
Postaw piwo autorowi tego posta
 
 
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.
Postaw piwo autorowi tego posta
 
 
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  
Postaw piwo autorowi tego posta
 
 
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  
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


website uptime

Powered by phpBB modified by Przemo © 2003 phpBB Group - recenzje mang
REKLAMAPorównywarka cen elektronikiLove and Lighttaniec z gwiazdamitaniec nowoczesny Warszawakredyt przez internetneroBearShare