Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Dane rownolegle na szeregowe

sivex 05 Jun 2005 17:00 2124 18
  • #1
    sivex
    Level 27  
    Wykorzystuje port lpt do otrzymywania informacji o stanach przelacznikow alarmowych w penym urzadzeniu. poczas rozbudowy zaczyna mi brakowac wejsc. Pomyslalem zeby wykorzystac do tego mikrokontroler by zebral stan kilku przelacznikow i przeslal szeregowo. Robilem cos podobnego kiedys na atmelu.

    Mam do tego urzadzenia wykonana plytke i jest tam malo miejsca a atmel potrzebuje rezonatora kondensatorow... A pozatym moze jest jakis uklad ktory bedzie odpowiedniejszy.

    Czy nie lepiej wykorzystac PIC'a jezel jest taka mozliwosc?
  • #2
    McRancor
    VIP Meritorious for electroda.pl
    Atmel, może pracować bez rezoantorów na wewnętrznym RC, tak jak PICe zresztą.

    Ale prościej będzie zastosować 74HC166?
  • #3
    sivex
    Level 27  
    Wykorzystuje tez 24c02 na plytce ktory zapisuje kilka danych z PCeta. dziki temo po podpieciu do innego komputera nie trace ciaglosci informacji o urzadzeniu. moze mozna wykorzystac eeprom w mikrokontrolerze?
  • #4
    McRancor
    VIP Meritorious for electroda.pl
    Jeśli stosowałeś 2051, lub 2313 to można go zamienić na Atiny2313, on chodzi bez zewnętrznych piedół i ma skromnego eproma, ale kwestia ile tego eproma potrzeba?
  • #5
    sivex
    Level 27  
    Wiem ze sie rozbrykalem :) moze jeszcze udalo by sie sterowac wyjasciami czyli odwrotnie, dane szeregowe zamienione na stany 8 wyjsc no i jezeli programowanie bylo by zblizone do visual basic to juz extra :)
    Wielkosc epromu odpowiednik 24c02 do przechowywania dodatkowych (moich) danych.
  • #6
    pubus
    Level 30  
    No to chyba odpowiedni będzie jakiś uC z eepromem i FIFO...
    Wtedy możesz sterować jak mają być wprowadzane dane a jak wyprowadzane...
  • #7
    sivex
    Level 27  
    Jezeli robi sie z tego problem to sterowanie wyjsciami chetnie sobie podaruje :) . pozostane przy wejsciach i epromiku.
  • #8
    LordBlick
    VIP Meritorious for electroda.pl
    AVR-y mają SPI, wręcz do tego idealne, a niektóre sprzętowo obsłużą tego zewnętrznego EEPROM-a (TWI). Sterowanie, jak najbardziej, to tylko kwestia softwarowa... :) Co do innych architektur nie mam tak dokładnej orientacji.
  • Helpful post
    #9
    marek_Łódź
    Level 36  
    Czyli tak - dajesz Atmelka zależnie od potrzeb ATTiny2313, ATMega8 lub ATMega16 /8515/8535 itp...(portów hohohoho), do PC łączysz się przez:

    1. SPI/USI<>LPT (wersja nie wymagająca dodatkowych elementów), PC pracuje jako MASTER, ATMEL jako SLAVE (ten układ składa się TYLKO z procesora, jakiegoś kondensatorka odsprzęgającego zasilanie)

    2. UART<>RS232 - niestety wymaga dodatkowego sprzętu do komunikacji MAX232 bądź interfejs na 2 tranzystorkach.

    W obu przypadkach bez problemu możesz wykorzystać wszystkie zasoby procesora (w szczególności porty w obu kierunkach i EEPROM).

    Niestety ATTiny2313 ma trochę mało EEPROM (128 byte, czyli połowę tego, czym dysponujesz), jeśli się nie zmieścisz ze swoimi danymi trzeba przejść na jakieś ATMega8 (500 byte EEPROM),.

    Podobnie jak kolega piętro wyżej nie neguję innych rozwiązań (PIC), ale też ich nie polecam bo nie znam.

    Co do programowania to może BASCOM (co piszę z pewnym niesmakiem), zawsze BASIC, choć z VB ma raczej mało wspólnego.
  • #10
    sivex
    Level 27  
    Dawno dawno temu wykorzystalem at89c2051. Wszystko funkcjonowalo ok ale dawal wrazenie malo doskonalego (niewiem moze sie myle).
    mam do niego niezly opis po polsku no i pozostaly gdzies programy i programator.
    wydaje mi sie ze sie uwsteczniam jezeli nie szukam innych lepszych rozwiazan.

    Quote:
    dajesz Atmelka zależnie od potrzeb ATTiny2313, ATMega8 lub ATMega16 /8515/8535 itp...(portów hohohoho),


    Brzmi zachecajaco. czy jak poradzilem sobie z AT89 to bedzie to cos "podobnego", cos moge wykorzystac czy mam zapomniec i zaczac od nowa :)
  • #11
    marek_Łódź
    Level 36  
    sivex wrote:
    Dawno dawno temu wykorzystalem at89c2051. Wszystko funkcjonowalo ok ale dawal wrazenie malo doskonalego (niewiem moze się myle).
    mam do niego niezly opis po polsku no i pozostaly gdzies programy i programator.
    wydaje mi się ze się uwsteczniam jezeli nie szukam innych lepszych rozwiazan.

    Brzmi zachecajaco. czy jak poradzilem sobie z AT89 to bedzie to cos "podobnego", cos moge wykorzystac czy mam zapomniec i zaczac od nowa :)


    Zawsze jakaś wiedza się przenosi. Jeśli robiłeś programy na AT89C to wiesz ile musiałeś w to zainwestować, więc oceń czy Ci się przyda nowa wiedza. Musisz z grubsza poznać architekturę tego procesorka i nową listę rozkazów (lub BASCOM, czy C na te procesorki).

    Możesz również pozostać przy AT89Cx051 programowo emulując transmisję SPI (ze względu na małą liczbę wyprowadzeń trzeba chyba pozostać przy tej wersji przesyłu). Masz też układy serii AT89S8252/53 które mają sprzętowe SPI i wbudowany EEPROM.

    Ja bym szedł w AVRki (np. ATMega8), ale wybór należy do Ciebie.
  • #12
    sivex
    Level 27  
    Quote:
    Ja bym szedł w AVRki (np. ATMega8), ale wybór należy do Ciebie.


    Namowiles mnie :)
    Prosil bym o przyspieszenie mojej edukacji i poszukiwan.
    Czy sa jakie sa jakies opisy, linki godne polecenia?

    Quote:
    Ale prościej będzie zastosować 74HC166?


    Nosilem sie z zamiarem podlaczenia do tego urzadzenia manipulatora/klawiaturki. jest tam 16 przyciskow akurat na zrobienie matrycy 4x4 czyli 8bitow powinno wystarczyc. czy wykorzystac HC czy AtMega8 sobie poradzi (jesli ja sobie poradze z nim)
  • #13
    marek_Łódź
    Level 36  
    sivex wrote:
    Namowiles mnie :)
    Prosil bym o przyspieszenie mojej edukacji i poszukiwan.
    Czy sa jakie sa jakies opisy, linki godne polecenia?


    Super ;)

    Trzeba by przeszukać forum - jest sporo linków. Kilka znajdziesz tu:

    https://www.elektroda.pl/rtvforum/topic305408.html

    Quote:
    Nosilem się z zamiarem podlaczenia do tego urzadzenia manipulatora/klawiaturki. jest tam 16 przyciskow akurat na zrobienie matrycy 4x4 czyli 8bitow powinno wystarczyc. czy wykorzystac HC czy AtMega8 sobie poradzi (jesli ja sobie poradze z nim)


    Jeśli Ci starczy wyprowadzeń (zawsze możesz dać ATMega16 lub 8515) to po co dokładać dodatkowe elementy. Cztery piny ustawiasz jako wejścia z opornikiem podciągającym (w AVR masz taki tryb), cztery wyjścia przemiatasz zerem w przerwaniach zegara albo w głównej pętli programu i już. A..... i jeszcze jakieś programowe likwidowanie odskoków (może wystarczyć proste opóźnienie w przejściu do kolejnego odczytu klawiatury).
  • #14
    sivex
    Level 27  
    Przejrzalem kilka pdf'ow zwracajac uwage na wyprowadzenia ilosc wej/wyjsc oraz poszukalem troche pomocy.
    Pod wzgledem budowy Atmega16 troche przekracza moje wymagania ale biorac pod uwage szybki rozwoj tego urzadzenia wole byc przygotowany i miec spory zapas. Tymbardziej ze dwa comy w przypietym
    PC sa juz zajete (do komunikacji bede musial urzyc lpt).
    Musze przyznac ze bardzo duzo opisow jest do at90s8515. polski opis bascoma ktory znalazlem tez opiera sie na at90s8515.
    Nie lubie sie wachac przy wyborze i wiem ze wiekrzosc niuansow poznam dopiero w praktyce ale od czego sa koledzy na forum :)

    Mikrokontroler mial by odczytac stany 16 wejsc (8 alarmowych i 8 manipulator), po czym wyslac je w szeregu do portu PC'eta. wydaje mi sie ze to nie musi byc konkretnie jakies specjalny port do komunikacji. Jeszcze dwa wyjscia(dane i synchro) powinny zalatwic sprawe.
    Nie jestem chyba wymagajacy :)
  • #15
    LordBlick
    VIP Meritorious for electroda.pl
    No to podpowiem - AT90S8515 to już przeżytek, jest zalecane przez producenta (Atmel), aby zastąpić ją ATmega8515, ten ma nawet o 3 piny więcej - razem 35 konfigurowalnych I/O. Na niewykorzystane wyprowadzenia można sobie podłączyć dla bajeru wyświetlacz i na nim wypisywać, co tam przyjdzie do głowy, np. "Bład transmisji danych nr 8"... ;) A dane z PC-em nie muszą wcale iść szeregowo, może byći równolegle po LPT w trybie EPP(procesorek sprawdza stan jakiejś linii i w zalezności od wyniku nadaje, lub odbiera dane. Taki równoległy half-duplex.
  • #16
    sivex
    Level 27  
    Konkretna odpowiedz i juz jeden problem co do wyboru procka rozwiazany.
  • #17
    sivex
    Level 27  
    Atmega16 juz na moim stole :)
    Czy jest mozliwosc zebym otrzymal zrodlo prostego programu do procka w bascomie. Chodzi o to zebym poznal strukture i sprobowal wgrac do atmegi na test. Jezeli jest mozliwosc to zeby zczytywal stan wysoki lub niski z jednego wejscia, zapamietal w zmiennej i podal ja na innym wyjsciu. Ja sobie to pozniej rozbuduje.
  • Helpful post
    #18
    LordBlick
    VIP Meritorious for electroda.pl
    Prosty program na AVRStudio :
    Code:
    #include <m16def.inc> ; Prohibits use of non-implemented instructions (ATmega16)
    
    .dseg
    .org SRAM_START
    .cseg
    ;————————————————————————————————————————————————————————————
    .org   $00 ; Reset Handle
       rjmp RESET
    ;————————————————————————————————————————————————————————————
    .org   INT0addr ; External Interrupt0 Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   INT1addr ; External Interrupt1 Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OC2addr ; Output Compare2 (Timer/Counter2 Compare Match) Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OVF2addr ; Timer/Counter2 Overflow Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   ICP1addr ; Input Capture1 (Timer/Counter1 Capture Event) Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OC1Aaddr ; Output Compare1A (Timer/Counter1 Compare Match A)Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OC1Baddr ; Output Compare1B (Timer/Counter1 Compare Match B) Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OVF1addr ; Timer/Counter1 Overflow Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   OVF0addr ; Timer/Counter0 Overflow Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   SPIaddr ; SPI (Serial Transfer Complete) Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   URXCaddr ; USART Receive Complete Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   UDREaddr ; USART Data Register Empty Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   UTXCaddr ; USART Transmit Complete Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   ADCCaddr ; ADC Conversion Complete Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   ERDYaddr ; EEPROM Ready Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org   ACIaddr ; Analog Comparator Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org    TWIaddr ; Irq. Handle for Two-Wire Interface
       reti
    ;————————————————————————————————————————————————————————————
    .org   INT2addr ; External Interrupt2 Handle
       reti
    ;————————————————————————————————————————————————————————————
    .org    OC0addr ; Output Compare0 Interrupt Handle (Timer/Counter0 Compare Match)
       reti
    ;————————————————————————————————————————————————————————————
    .org   SPMRaddr ; SPM complete (Store Program memory Ready) Interrupt Handle
       reti
    ;————————————————————————————————————————————————————————————
    .def   FalseOrZero =      r13
    .def   TrueOrOne =         r14
    .def   DataByte =         r16
    .def   TempA =            r17
    .def   TempB =            r18
    #define X x
    #define Y y
    #define Z z
    #define LOW low
    #define HIGH high
    .cseg
    ;————————————————————————————————————————————————————————————
    .org   $00 ; Reset Handle
    ;————————————————————————————————————————————————————————————
       rjmp RESET
    ;------------------------------------------------------
    #define PORT_IN PORTA      ; Port zewnętrzny wejściowy
    #define PORT_OUT PORTC      ; Port zewnętrzny wyjściowy
    ;------------------------------------------------------
    #define DDR_IN PORT_IN-1   ; Port zewnętrzny wejściowy - rejestr kierunku
    #define PIN_IN PORT_IN-2   ; Port zewnętrzny wejściowy - rejestr odczytu
    #define DDR_OUT PORT_OUT-1   ; Port zewnętrzny wyjściowy - rejestr kierunku

    RESET:
    ;Proc InitStack()
    InitStack:
    ; It must be not to be a subroutine, because must
    ; be stack point initialised before call it
    ; Inicialise Stack Point - push decrement it, pop increment
       clr FalseOrZero ; fast Access Bool logic FALSE register
       ldi TempA, 1
       mov TrueOrOne, TempA ; fast Access Bool logic TRUE register
       ldi TempA, HIGH(RAMEND)
       out SPH, TempA
       ldi TempA, LOW(RAMEND)
       out SPL, TempA
    ;Init I/O
       out PORT_IN, FalseOrZero ; Ustaw stan portu na zero
       out DDR_IN, FalseOrZero ; Ustaw port na wejście
       out PORT_OUT, FalseOrZero ; Ustaw stan portu na zero
       ser TempA ; inaczej "ldi TempA, 0xFF"
       out DDR_OUT, TempA ; Ustaw port na wyjście
    MainProc:
       in DataByte, PIN_IN
       out PORT_OUT, DataByte
       rjmp MainProc
    Można sobie dowolnie ustawiać porty jako wejściowe i wyjściowe w tej linijce :
    Code:
    #define PORT_IN PORTA      ; Port zewnętrzny wejściowy
    
    #define PORT_OUT PORTC      ; Port zewnętrzny wyjściowy
    Program przepisuje w głównej pętli (MainProc) z wejścia na wyjście.
    Co prawda program działałby bez InitStack, ale dobry obyczaj każe zainicjować stos, aby przy rozbudowywaniu programu się nie zdziwić... ;)
    Wektorami przerwań na początku programu też się nie przejmuj, to co nie używane ma ustawiony natychmiastowy powrót z przerwania.
  • #19
    sivex
    Level 27  
    Wiem ze jestem namolny :) a cos podobnego w bascomie?