Układ z iButton'ami 1990

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Układ z iButton'ami 1990

Post autor: seg » 03 cze 2006, 1:32

Proszę o pomoc, a w sumie napisanie w całości :) programu na ATTINY2313. Praca układu ma polegać na włączaniu przekaźnika po odczytaniu nr pastylki iButton 1990 i jego weryfikacji z danymi z EEPROMU co oczywiście wiąże się z koniecznością wcześniejszej rejestracji pastylki. Ilość obsługiwanych - powiedzmy 5szt. Sposób działania układu - przyłożenie pastylki zgodnej - stan wysoki na wyjściu, pastylka niezgodna - brak reakcji. Dodatkowo układ ma działać w trybie toggle tzn przyłożenie pastylki (zgodnej) "włącz" (i trzymaj) do momentu ponownego przyłożenia pastylki zgodnej (wtedy "wyłącz"). Dodatkowo można właczyć jako bajer opcję migotania diody (zielona) w adapterze (czytniq) do iButtona - jak i kiedy - Wy decydujecie. Reszta należy do Waszej pomysłowości. PS Ciągle chcę zacząć z uC i jakoś nigdy nie mogę.. wiem jak cenna to wiedza lecz nie mogę póki co zaangażować się w to całkowicie. Mam na myśli ATTINY2313 właśnie, ponieważ posiadan knigę Góreckiego i płytkę do tego kursu (..no do 90S2313) ale nie dam 30zł za to jak mogę kupić TINIEGO za apr 5.9zł. Dzięki!!

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 03 cze 2006, 16:18

Witam!

A czy znaleźć coś własnymi siłami jest tak trudno?
Ja znalazłem na Elportalu coś takiego:
http://elportal.pl/pdf/k07/67_020.pdf
i do tego jeszcze to:
http://elportal.pl/pdf/k07/62_020.pdf

Takie rzeczy znajdziesz np. na: http://elportal.pl/index.php?module=Con ... 66&meid=19

Ale do tego trzeba pięć minut "myślunku"...

Co do programów na 90S2313 - był już temat "co zamiast": http://elportal.pl/forum/viewtopic.php?t=2965,
i w tymże stoi jak "byk", że programy pisane dla tego uP działają bez problemów na tiny2313 - po odpowiednim ustawieniu fusebyte'ów...

Pozdrawiam!

Marcin "Max" G.

seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Post autor: seg » 03 cze 2006, 16:51

Wiem, że były takie projekty ale jakbyś dołożył choćby sekundę "pomyślunku" to nie chodzi mi o hardware tylko gotowy program. I nie interesuje mnie sterowanie 2 milionów przekaźników i serwa tylko jednego przekaźnika i nic poza tym (no i powtarzam - wyłącznie na ATTINY2313 a nie jakiś 89C2051). Liczyłem na to, że ktoś coś takiego ma na bascoma i się "podzieli". Nie znam się na tym, przyznaję się i nie mam czasu, żeby teraz do tego podejść - potrzebuję gotowca. Poza tym nie pisałem nic o wątpliwościach czy to będzie działać na TINYM tylko, że mimo, iż płytka obsługuje 90S2313 to ja w niej chcę zaprogramować ATINY2313. To miałem na myśli. Mimo wszystko dzięki za poświęcony czas.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 03 cze 2006, 16:59

Spróbuję ci to dać na wtorek. EEPROM ma być z mikrokontrolera??

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 03 cze 2006, 17:03

Ale zaprogramowanie tiny2313 przez ISP przebiega dokładnie tak samo jak starszego 'brata'... Nic nie musisz zmieniać - wystarczy tylko odpowiednio fuse'y zaprogramować.

A oprogramowanie do w/w jest tutaj: https://elportal.pl/index.php?module=Co ... 10&meid=-1

Co do programu dla 89C2051 - można go w prosty sposób przerobić dla tiny2313. Parę deklaracji portów, ustawienia timer'ow i to w zasadzie wszystko. Dosłownie 10 minut i gotowe.

seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Post autor: seg » 03 cze 2006, 17:26

:arrow: michal17 - tak pamięć z procka - nie śpieszy się, bardzo Ci dziękuję!!

:arrow: marcing - "słuchajcie uważnie bo nie będę powtarzał :) " - WIEM, że to jest to samo i tak samo się programuje..napisałem tak tylko dlatego, że przebitka cenowa jest nieuzasadniona i to jest powodem chęci zastosowania ATTINY2313. A a fusebity to dla mnie to, co podejrzewam dla Ciebie heksametylenotriperoksydiamina.

Pozdawiam!!

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 03 cze 2006, 17:31

:arrow: seg
Ja wysadzić niczego w powietrze nie chcę

A opis fusebite'ów masz w DS-ie tiny2313...

Nie wiem jak chcesz to taktować, ale domyślnie tiny ma włączony wewnętrzny oscylator 8MHz i podział przez 8 - czyli pracuje tak, jak 90S2313 z zegarem 1MHz...
Ostatnio zmieniony 03 cze 2006, 17:42 przez marcing, łącznie zmieniany 1 raz.

seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Post autor: seg » 03 cze 2006, 17:40

..dobra skończmy to bo staje się infantylne. Wiem gdzie szukać danych, zresztą mam to wydrukowane. :arrow: michal17 - liczę na Ciebie.

:idea: taktowanie, hmm, nie wiem sam. Układ ma pracować w ciężkich warunkach - to chyba kwarc zastosuję. Nie wiem jak z tym taktowaniem wewnętrznym, jego stabilnością itd. Raczej pozostańmy przy kwarcu.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 05 cze 2006, 13:14

A ile ma być tych układów :?:

[ Dodano: 2006-06-05, 15:15 ]

Kod: Zaznacz cały

'------------------------------------------'
'autorem kodu jest Michał Olejniczak''
'michal.olejniczak@op.pl---------------'
'------------------------------------------'
'dołączyć czytnik pastylek do portd.0
'dołączyć przekażnik i zieloną diodę do portd.1
'dołączyć czerwoną diodę do portd.2
'do portów portd.3 do portd.6 włącznie podłączyć dipswich
'program jest na cztery do pięciu układów
'może zawierać błędy ale spróbuję je szybko znaleźć

Config 1wire = Portd.0
Config Portd = 0111111
       Portd = 0000000

Dim Adres(8)as Byte
Dim A As Eram String * 8
Dim B As Eram String * 8
Dim C As Eram String * 8
Dim D As Eram String * 8
'Dim E As Eram String * 8     'jeśli pięć układów to usunąć pierwszy apostrof

Do
If Pind.0 = 1 Then
Gosub Czytaj                  'sprawdzanie numeru urzytej pastylki
Else
Gosub Rejestroj
End If
Loop
End                           'end program

Czytaj:
Adres(1) = 1wsearchfirst()    'odbieranie numeru pastylki
If Adres(1) , 8 = A Or B Or C Or D Then       'or e Then  'jeśli pięć układów to usunąć pierwszy apostrof i Niebieskie then
Set Portd.1
Wait 10                       'czas włączenia w sekundach
Reset Portd.1
Else                          'jeśli adres się nie zgadza
Set Portd.2
Wait 5
Reset Portd.2
End If
Return

Rejestroj:
Adres(1) = 1wscarchfirst(0)
If Portd.3 = 1 And Err = 0 Then
Adres(1) , 8 = A
Else If Portd.4 = 1 And Err = 0 Then Adres(1) , 8 = B
Else If Portd.5 = 1 And Err = 0 Then Adres(1) , 8 = C
Else If Portd.6 = 1 And Err = 0 Then Adres(1) , 8 = D
'Else if Err = 0 then Adres(1) , 8 = C     'jeśli pięć układów to usunąć pierwszy apostrof
End If
Err = 0
Wait 3
Return

seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Post autor: seg » 05 cze 2006, 21:43

Układów ma być 5szt. PS Czytnik iButton posiada wyłacznie zieloną diodę. Czy można prosić o opcję migania diody z częstotliwością 1Hz w czasie gdy przekaźnik będzie włączony? Dzięki.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 06 cze 2006, 14:19

Kod: Zaznacz cały

'------------------------------------------' 
'autorem kodu jest Michał Olejniczak'' 
'michal.olejniczak@op.pl---------------' 
'------------------------------------------' 
'dołączyć czytnik pastylek do portd.0 
'dołączyć przekażnik do portd.1 
'dołączyć  diodę do portd.2
'do portów portd.3 do portd.6 włącznie podłączyć dipswich 
'program jest na cztery do pięciu układów 
'może zawierać błędy ale spróbuję je szybko znaleźć 

Config 1wire = Portd.0 
Config Portd = 0110000  'tu był błąd !! 
          Portd = 0000000 

Dim Adres(8)as Byte 
Dim A As Eram String * 8 
Dim B As Eram String * 8 
Dim C As Eram String * 8 
Dim D As Eram String * 8 
Dim E As Eram String * 8 
Dim I as Byte

Do 
If Pind.0 = 1 Then           'do rejestracji połączyć portd.0 z Vcc
Gosub Czytaj                  'sprawdzanie numeru urzytej pastylki 
Else 
Gosub Rejestroj 
End If 
Loop 
End                           'end program 

Czytaj: 
Adres(1) = 1wsearchfirst()    'odbieranie numeru pastylki 
If Adres(1) , 8 = A Or  Adres(1) , 8 = B Or Adres(1) , 8 = C Or Adres(1) , 8 = D Or 
Adres(1) , 8 = E Then 
Set Portd.1
For I = 0 to 9
Set Portd.2
Waitus 500
Reset Portd.2
Waitus 500 
Next 
Reset Portd.1 
Else                          'jeśli adres się nie zgadza 
Set Portd.2 
Wait 5 
Reset Portd.2 
End If 
Return 

Rejestroj: 
Adres(1) = 1wscarchfirst(0) 
If Portd.3 = 1 And Err = 0 Then 
Adres(1) , 8 = A 
Else If Portd.4 = 1 And Err = 0 Then Adres(1) , 8 = B 
Else If Portd.5 = 1 And Err = 0 Then Adres(1) , 8 = C 
Else If Portd.6 = 1 And Err = 0 Then Adres(1) , 8 = D 
Else if Err = 0 then Adres(1) , 8 = E     
End If 
Err = 0 
Wait 3 
Return


[ Dodano: 2006-06-09, 21:26 ]
Jest jeszcze parę błądów (chodzi o IF ... THEN) . Wie ktś jaki błąd jest oznaczony kodem 53 :?: w mojej wersji pliku pomocy tego nie ma (pominięto 53-59).

[ Dodano: 2006-06-09, 21:36 ]
mam problem jeszcze z tym:

Kod: Zaznacz cały

If Adres(1) , 8 = A Or  Adres(1) , 8 = B Or Adres(1) , 8 = C Or Adres(1) , 8 = D Or
Czy wie ktoś jak to poprawić bo ja nie mam pojęcia co tu jest żle:?:

ZbeeGin

Post autor: ZbeeGin » 10 cze 2006, 16:54

Kod błędu nr. 53 jest kodem wewnętrznym kompilatora: "Other error codes are internal ones. Please report them when you get them." Czyli masz szczęście wydobyć nowy kod :D Ale zaraz, zaraz... Mnie tam wywala błąd nr 35...

A co chcesz osiągnąć pisząc: Adres(1),8? Są kwalifikatory w Bascom-ie ale dotyczą bitów: Adres(1).8 (kropka) i nijak się to ma do zmiennych typu String.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 11 cze 2006, 20:20

chaodziło o to aby wzieło całą tablicę a nie tylko jeden bajt

ZbeeGin

Post autor: ZbeeGin » 12 cze 2006, 16:04

To niestety nie w ten sposób. Trzeba każdy bajt porównywać osobno. :(

seg
Użytkownik
Posty: 223
Rejestracja: 17 sie 2005, 1:08
Lokalizacja: PÓŁNOC - POŁUDNIE

Post autor: seg » 03 lip 2006, 10:35

..rozumiem, że mimo wysiłków kolegi ten programik jest niezdatny do użycia..czy w takim razie ktoś mi pomoże?

ODPOWIEDZ