Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pomoc w napisaniu pliku do 89C2051

27 Sie 2007 20:07 2250 13
  • Poziom 21  
    Witam Proszę o Pomoc bo dopiero zaczynam (chce się nauczyć) programowania w bascomie, nie wiem jak do tego sie zabrać. Chciałbym zaprogramować procek 89C2051 tak żeby działał jak automatyczny włącznik świateł samochodowych czyli światła zostają włączone po upływie ok 3s od momentu uruchomienia pojazdu(najpierw włączane są postojówki a po upływie 1s światła mijania)
    schemat dam poniżej. Wyrozumiałych proszę o pomoc będę wdzięczny za napisanie wsadu i wytłumaczenie.

    Pomoc w napisaniu pliku do 89C2051

    Schemat jest zapożyczony z innego układu. . Pozdro
  • Relpol przekaźniki
  • Poziom 14  
    Witam,
    ja także niedawno zacząłem się interesować programowaniem i napisać taki program na AT89C2051 w baskomie nie potrafię, lecz jeśli by interesowało Cię napisanie takiego programu na ATMege8 w C, to służę pomocą. Nie wiem, w jakim stopniu interesuje Cię programowanie, lecz do tego musisz mieć programator, do AT89C2051 można złożyć w krótkim czasie, ponieważ składa się on z niewielu elementów mieszczących się we wtyku LPT, a w ATMedze8 programator składa się z podłączenia odpowiednich pinów scalaka do pinów portu LPT. W dodatku ATMega daje większe możliwości w dalszej edukacji, lesz do takiego celu AT89C2051 jak najbardziej wystarczy.

    Pozdrawiam.
  • Poziom 21  
    wiem mam przejsciówke (programator) do tego procka i program tylko potrzebuje wsad, ale nie wiem jak sie do tego zabrac. Najlepiej gdyby ktoś to zrobił i wytłumaczył jak to robił ja w ten sposób najlepiej się ucze. Obsługe programu mam przecwiczona. A co do atmegi to sie nad tym zastanawialem ale zostane przy tym wyborze na razie. pozdro
  • Poziom 14  
    Zgadze się że najlepiej sie człowiek uczy na przykładach, lecz o wiele większa satysfakcja jest z dojścia do czegoś samemu :p. Jeśli masz program, to potrzebujesz już tylko kompilatora, taki kompilator można ściągnąć z neta, wpisujesz w google, 'kompilator bascom opis' i szukasz na jakimś forum gdzie ktoś miał podobny problem. Więcej nie umiem Ci pomóc, ponieważ ja zajmuje się tym od niedawna, programuje inną rodzinę mikrokontrolerów i stosuje inny język. Mam nadzieje że choć troche pomogłem.

    Pozdrawiam.
  • Relpol przekaźniki
  • Poziom 20  
    Poczytaj jak wyslac dana na port i jak szczytac ale z przycisku a potem jak pomyslisz to dojdziesz do rozwiazania.
  • Poziom 21  
    nie wiem o co ci chodzi. Zacząłem kurs C ze strony Patrona na atmega8 i mam nadzieje że sie czegoś naucze narazie studiuje pierwszy przykład i czekam na procka może uda mi sie zrobić to na tym uC. Pozdro
  • Pomocny dla użytkowników
    Opisz ciąg czynności od podania napięcia na procesor poprzez zmiany sygnałów wejściowych i odpowiadających im zmian sygnałów wyjściowych

    ' Zdefiniowanie nazw alternatywnych dla bitów portów (dla większej czytelności)

    Zaplon Alias P3.4
    Mijania Alias P1.2
    Postojowe Alias P1.3

    1. Włączenie zasilania (stacyjka włączona) (start programu)

    Mijania= ? ' Jaki ma być stan po podaniu zasilania ?
    Postojowe= ?

    2. Włączony rozruch (Zaplon=0)

    Mijania=?
    Postojowe=?

    3. Silnik pracuje (Zaplon=1)

    Mijania=
    Postojowe=

    Najlepszy byłby wykres czasowy

    Zasilanie __>
    Zaplon____>

    Postojowe_>
    Mijania____>

    I to będzie można dopiero zakodować w BAscomie


    Jakim kwarcem będziesz taktował procesor ?


    Jest tu jeden problem, zanik sygnału ze stacyjki (zapłon=1) nie jest równoznaczne z tym, że silnik pracuje ...
  • Użytkownik usunął konto  
  • Poziom 21  
    układ miał dzialac w ten sposób po zaniku napiecia z koncówki P3.4 układ miałby załączyć swiatła pozycyjne po upływie ok 3s a potem swiatła mijania po ok 1-2s. kwarc miałby 3,579545 Mhz. Nie jestem w stanie sam napisac programu teraz poniewaz dopiero ucze sie programowac, wiec niektóre pojęcia o których mi mówicie nie rozumie :( .
  • Pomocny post
    Pomocny dla użytkowników
    Wg opisanej zasady powinien działać poniższy program

    Code:



    ‘ Program swiatła samochodowe – opis działania
    '
    ‘ Po włączeniu zasilania, gaszone są swiatła postojowe i mijania
    ' (gaszenie w sensie wyłączenia przekaźników)
    ‘ Program czeka na pojawienie się sygnału zapłonu ze stacyjki
    ‘ Następnie program czeka na znikniecie tego sygnału
    ‘ Odmierzane są 3 sekundy
    ‘ Włączane są światła postojowe
    ‘ Odmierzane są 2 sekundy
    ‘ Wyłączane są światła postojowe
    ‘ Włączane są światła mijania
    ‘ program krąży w martwej pętli do wyłączenia zasilania

    $regfile=”89c2051.dat”  ' definicje dot. użytego procesora
    $crystal=3579545   ' częstotliwość kwarcu w Hz

    ‘ Definicje stałych

    const zapalone = 1
    const zgaszone =0


     ‘ ponizej określamy co program rozumie przez włączenie zapłonu

    const zaplon =0

    ‘ definicje nazw zastępczych dla bitów portu (dla zwiększenia czytelności)

    Stacyjka         Alias P3.4
    Mijania       Alias P1.2
    Postojowe   Alias P1.3

    ‘ Opcjonalna dioda LED sygnalizacji „życia” procesora
    ' dioda LED podłączona katodą do nóżki portu P1.1
    ' i anodą przez rezystor 330Ω do +5V

    LED_Zycie          Alias P1.1   

    ‘ Zmienna filtr będzie służyła do zwiększenia odporności programu
    ‘ na zakłócenia sygnału ze stacyjki 
    ‘ To taki rodzaj kondensatora, który musi się naładować do pewnej
    ‘ wartości by układ zadziałał.

    Dim filtr as byte 

    ‘----------------------------------------------------
    ‘ Tu się zaczyna program
    ‘----------------------------------------------------
    ‘ gaszenie świateł i LED_Zycie (ustalenie stanu układu)

    P1=0

    Set Stacyjka    ‘ P3.4 jako wejście

    filtr=0

    ‘ Pierwsza pętla: Czekanie na włączenie rozrusznika
    ‘ Czekanie kończy się 200 ms po ustaleniu się stanu sygn. ze stacyjki

    do
        if Stacyjka<>zaplon then
           filtr=0   ‘ rozładowujemy „kondensator” gdy brak zapłonu
        else
           Incr filtr ‘ podładowujemy „kondensator” (filtr=filtr+1)
        end if

    waitms 10   ' opóźnienie 10 ms

    loop until filtr>20


    ‘ Druga pętla: Czekanie na wyłączenie rozrusznika

    filtr=0

    do
        if Stacyjka=zaplon then
          filtr=0
        else
           Incr filtr
        end if

    waitms 10

    loop until filtr>20

    wait 3   ' odczekanie 3 sekundy po wyłączeniu rozrusznika

    pozycyjne=zapalone

    wait 2  ‘ opoznienie 2 sekundy   

    pozycyjne=zgaszone
    mijania=zapalone

    do
    ‘ Tu można wstawić np. miganie diodą LED_Zycie sygnalizującą
    ' że procesor żyje
     
      Set LED_Zycie
      Waitms 500
      Reset LED_Zycie
      Waitms 500
    loop   ‘ Martwa pętla, nic nie robiąca

    end


    Oczywiście ten program ma wady, bo zakłada, że silnik już pracuje po jednokrotnym "zakręceniu" rozrusznikiem. W rzeczywistości należałoby dodać funkcję wykrywającą następne włączenia rozrusznika i wyłączającą na ten czas światła.

    UWAGA. Układu może spowodować zgaśnięcie świateł na drodze (np. z powodu awarii procesora lub jego portów - może to spowodować zagrożenie dla zdrowia i życia pasażerów lub osób postronnych
  • Poziom 21  
    Mam pytanko aby zabezpieczyć ten układ, trzeba było by ??? na jedną nóżkę dać sygnał że jest zapłon wtedy układ by chodził a gdy zapłon zniknie to układ się zeruje i powraca do stanu początkowego ????. czy to by go zabezpieczyło. pozdro i masz u mnie pomoc dzieki
  • Pomocny dla użytkowników
    dakin11 napisał:
    Mam pytanko aby zabezpieczyć ten układ, trzeba było by ??? na jedną nóżkę dać sygnał że jest zapłon wtedy układ by chodził a gdy zapłon zniknie to układ się zeruje i powraca do stanu początkowego ????. czy to by go zabezpieczyło. pozdro i masz u mnie pomoc dzieki


    Sformułuj jaśniej pytanie, bo nie rozumiem, sygnał zapłon (w sensie rozrusznik już masz). Sama obecność napięcia na instalacji też nie niesie pełnej informacji.

    Ewentualną informacją lepszą od sygnału ze stacyjki byłby sygnał z uzwojenia pierwotnego cewki zapłonowej ale tam trzeba zrobić dość dobre kształtowanie sygnału, bo sygnał tam ma spore przepięcia i oscylacje. Procesor musiałby sprawdzać czy obroty silnika są powyżej np. 0.8 wolnych obrotów silnika przez jakiś założony czas i to interpretować jako dowód na pracę silnika. Tylko potrzebna jest informacja o częstotliwości impulsów z cewki w funkcji obrotów silnika.

    Jeszcze pytanie jest co robić jak silnik się zatrzyma czy przełączać na postojowe i jak je potem wyłączyć ?
  • Poziom 21  
    miałem na myśli gyby zrobić tak że jak damy zapłon to układ będzie czekał na impuls z rozrusznika a gdy wyłączymy zapłon to uC sie wyłancza co powoduje wylączenie świateł a ponowne załączenie zapłonu uC bedzie znów czekał na impuls ze stacyjki zeby włączyć swiatła po czasie. Większość samochodów ma tak żeby ponownie zakręcić rozrusznikiem należy przekręcić ponownie kluczykiem.
  • Warunkowo odblokowany
    Po pierwsze masz nieczytelny schemat z błędami. Jak nie zabezpieczysz tranzystorów sterujących przekaźnikami za pomocą diod to spalisz je? Wejście czujnika z stacyjki też bym zabezpieczył diodami, tak na wszelki wypadek. Żeby napisać program dobrze wiedzieć, jakim zegarem taktujesz procesor. Ja bym proponował jakiś mały, np. 4MHz, bo nie ma sensu tu szaleć. Potrzebne to do odmierzania czasu. A i do jakiego pojazdu to chcesz wszczepić? Podane na forum przykłady programów nie są złe, ale dla komunikacji musisz mieć program niezawodny, bo awaria to ryzyko na drodze, a i policja cię nie oszczędzi. Dlatego trzeba stworzyć oprogramowanie profesjonalnie i go wytestować. A odmierzanie czasu programowo, bez wsparcia sprzętu to ryzyko, że układ zgłupieje np. zimą, bo będzie podatny na zmiany temperatury, i zamiast 3 sekund domierzy 5.

    Daj se spokój z C. Jak nigdy nie programowałeś mikroprocesorów to cię zabije i zniechęci do końca życia? Zacznij od BASCOM 51, bo jest prosty i dobrze opisany, a dodatkowo nie musisz się znać tak dokładnie na mikroprocesorach jak to jest w C. Polecam kurs z EDW 'Elektronika Dla Wszystkich"