Attiny 2313

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!
ODPOWIEDZ
Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

Attiny 2313

Post autor: Nick_2 » 04 gru 2007, 7:58

Witam
Mam pytanie odnośnie konfiguracji portow w attiny 2313. Zrobilem dosyc prosty ukladzik zawierajacy 3 przyciski wyswietlacz 4 segmentowy. Mam klopot poniewaz brakuje mi jednego wolnego portu, do sterowania piezo. Moze ktos sie orientuje czy jest mozliwosc na krotka chwile np na 2 sekundy w ktorych brzeczyk ma dzialac zmienic w petli konfiguracje portów aby móc podłączyć piezo równolegle z ktoryms z przycisków? Wtedy brzeczyk działałby tylko po przekonfigurowaniu portu na wyjście, co na chwile zblokowałoby przycisk

Awatar użytkownika
Mateusz
-
Posty: 60
Rejestracja: 21 sty 2006, 16:31
Lokalizacja: Ełk
Kontakt:

Post autor: Mateusz » 04 gru 2007, 17:25

Możesz zmienić konfigurację portów, ale zważ na to, że jeśli brzęczyk będzie podłączony pod któryś pin do którego dołączony jest przycisk. To jeśli nawet ustalimy tą nóżkę jako wyjsćie i podamy na to wyjsćie 1 (chcąc aktywować brzeczyk) to tym przyciskiem będziesz mógł ściągnąć do 0 co wyłączy brzeczyk. Jednym słowem to nie praktyczne zbytnio. Proponuje wyświetlaczem sterować za pomocą rejestru szeregowo-równoległego :smile: Wtedy byś troche zaoszczędził nóżek i mógł podłączyć brzęczyk. A tak apropo to w czym piszesz?

ZbeeGin

Post autor: ZbeeGin » 04 gru 2007, 18:01

W systemie docelowym mógłbyś przełączyć RESET w tryb pracy zwykłego portu i wtedy masz dodatkowy pin. Niestety zablokujesz sobie tym samym możliwość programowania w systemie (ISP).
Całą operację zatem można przeprowadzić po finałowym zaprogramowaniu mikroprocesora przez przestawienie odpowiedniego fuse-bitu.

Chyba, że masz programator równoległy...

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 04 gru 2007, 19:01

ZbeeGin pisze:W systemie docelowym mógłbyś przełączyć RESET w tryb pracy zwykłego portu
Albo wykorzystać końcówki XTAL1 i XTAL2. Jeśli nie zależy Ci na wysokiej dokładności generatora taktującego uC, możesz zmienić źródło taktowania na wew. oscylator RC (wtedy końcówki X1 i X2 pracują jako porty I/O).

Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

Post autor: Nick_2 » 04 gru 2007, 19:38

Pisze programik w bascomie i uzywam programator na USB bo nie mam portu LPT w kompie.

elektronWielki
Użytkownik
Posty: 247
Rejestracja: 30 maja 2006, 12:45
Lokalizacja: kontownia

Post autor: elektronWielki » 04 gru 2007, 21:05

Nick_2

dobrze myslisz z tym wykorzystaniem pinow, ktore badaja stan przyciskow.
Jesli jednak nie chcesz, aby ktorys z przyciskow blokowal dzwiek buzerka musisz pokombinowac.

Przyjmijmy, ze wykorzystujesz nozki n1, n2, n3 do sprawdzania stanu przyciskow. Pod n1 i Vcc podpinasz buzerek, n1 i n2 do przycisku S1, n2 i n3 do przycisku S2 oraz n1 i n3 do przycisku S3. Przyciski zatem nie laczysz z zadna linia zasilania tylko do samych koncowek procka. Zauwaz, ze wcisniecie S3 jest rownoznaczne z jednoczesnym wcisnieciem S1 i S2, ale to nie powinno stanowic problemu.

Na czas pracy buzerka n1 pracuje jako wyjscie i jest w stanie niskim.
Aby odczytac nastepujace przyciski:
- S1 - n1 wyjscie L, n2 wejscie pullUp, n3 HiZ
- S2 - n2 wyjscie L, n3 wejscie pullUp, n1 HiZ
- S3 - n3 wyjscie L, n1 wejscie pullUp, n2 HiZ

Zakladamy, ze cala procedura odczytu stanu klawiszy zajmuje kilkadziesiat taktow CPU, tak aby buzzer nie zdazyl dac glosu.
Rezystancja buzera nie powinna wplywac na odczyt przyciskow, poniewaz buzerki piezo maja duza rezystancje wewnetrzna.

Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

Post autor: Nick_2 » 05 gru 2007, 9:27

Dzieki za informacje teraz ukłądzik działa jak trzeba, ale pojawił sie inny problem. Chodzi mianowicie o pamieć eeprom. Chce zeby po właczeniu zasilania układu została ona odczytana a jej wartosc została wyświetlona na wyświetlaczach LED. Potem za pomoca przyciskow wartosc ta bedzie zmniejszana lub zwiekszana. Z tym nie ma problemu, wykorzystuje polecenia readeeprom i jest. Kłopot jest zaraz po zaprogramowniu procka, kiedy w eepromie pojawiaja sie przypadkowe wartosci. Wtedy musze na zwiekszac zawartosc liczników az do momentu kiedy na wyswietlaczu ukaz sie jakas sensowna wartosc, ktora po nacisnieciu innego przycisku jest zapisywana do pamieci eeprom. Nie moge na poczatku nic zapisac do eepromu, bo po wylaczeniu zasilania na wyswietlaczy pokazałaby sie ta wpisana wartosc a nie ostatnio wprowadzona przed wyłaczeniem zasilania. jak można to obejść??

elektronWielki
Użytkownik
Posty: 247
Rejestracja: 30 maja 2006, 12:45
Lokalizacja: kontownia

Post autor: elektronWielki » 05 gru 2007, 11:07

Przygotuj osobny wsad przeznaczony dla pamieci eeprom z ustalonymi wartosciami.
Podczas programowania flasha zostanie rowniez zaprogramowany eeprom.

ZbeeGin

Post autor: ZbeeGin » 05 gru 2007, 17:51

Nick_2 pisze:Kłopot jest zaraz po zaprogramowniu procka, kiedy w eepromie pojawiaja sie przypadkowe wartosci.
Jak to przypadkowe? Czysty EEPROM jest wypełniony wartościami 0xFF (255 dec). To nie jest pamięć RAM tylko stała pamięć reprogramowalna!

Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

Post autor: Nick_2 » 06 gru 2007, 17:15

na wyswietlaczu czterocyfrowym zaraz po włączeniu zasilania i wykonaniu polecenia readeeprom z czterech pierwszych komórek pamieci (od 1 do 4 włacznie) pierwszy segment sie nie swieci na drugim wysietlane jest 9 trzeci tez sie nie swieci i na oststnim takze wyswietla sie 9. Testowalem na dwoch procesorach i na obu jest identycznie

elektronWielki
Użytkownik
Posty: 247
Rejestracja: 30 maja 2006, 12:45
Lokalizacja: kontownia

Post autor: elektronWielki » 07 gru 2007, 0:33

Nick_2 pisze: pierwszy segment sie nie swieci na drugim wysietlane jest 9 trzeci tez sie nie swieci i na oststnim takze wyswietla sie 9.
Nick_2
Z Twojego opisu niewiele można sie dowiedzieć o istotnych elementach projektu, który realizujesz.
Przede wszystkim napisz jak stan wyświetlacza zależy od pamięci eeprom.
Wynika z opisu, że błąd leży w programie, a dokładniej procedurze która wyświelta liczbę na wyświetlaczu.
Weź pod uwagę to, że jeden wyświetlacz 7-segmentowy może wyświetlić 10 różnych cyfr oraz tyle samo różnych liczb, natomiast pojemność jednej komórki pamięci eeprom to 256 różnych liczb.
Może program wywala się gdy chcesz wyswietlic na jednym wyswietlaczu liczbe 255(0xff). To calkiem prawdopodobne zważywszy na cykl wystepujacy w ciagu disp3(zgaszony)-disp2(9)-disp1(zgaszony)-disp0(9).

ODPOWIEDZ