Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki
  • #1 30 Mar 2009 20:58
    fjohny
    Poziom 9  

    Witam.

    mam pytanko o atmegę : czy gdy zadeklaruję załóżmy port a jako wejscie to na wejście mam podawać +5V czy 0V ?

    pytanie drugie: mam program sprawdzony (załaczanie diody). Symulator poprawnie go interpretuje a jak go wgram do uC (poprawna weryfikacja) to na wyjsciu nie ma sygnału. program przyjał, dobrze procka rozpoznał a efektu nie ma.

    Czy mogłem w jakiś sposób spalić te atmegę że wejscia/wyjscia nie działają a procek poprawnie działa?

  • #2 30 Mar 2009 21:09
    atom1477
    Poziom 43  

    Właśnie na tym polega idea wejścia że nie wiadomo co podawać na wejście.
    Albo inaczej. Nie jest konkretnie powiedziane czy podawać 0 czy 1. Raz to raz to i tyle.
    Układ dopiero będzie sprawdzał i wtedy się dowie.

    Mogłeś tak spalić jak napisałeś.

    Ale nie koniecznie to musi być to.
    Na moje oko masz standardowy problem. Ale najpierw pokaż kod. Od tego się zaczyna na tym forum.

  • #3 30 Mar 2009 21:12
    _Robak_
    Poziom 33  

    Niech zgadne wystawiasz sygnal na porcie C ? ;)

  • #4 30 Mar 2009 21:36
    atom1477
    Poziom 43  

    Na moje oko odczytuje tak:

    Code:

    A = PortB


    a zapisuje tak:
    Code:

    DDRC = 0
    PortC = 255


    Ot i cały problem.

  • #5 30 Mar 2009 21:52
    fjohny
    Poziom 9  

    W celu sprawdzenia wyjść uC napisałem taki oto program który na symulatorze działa poprawnie zaś na nóżkach uC brak napięcia... dlaczego?

    Code:
    $regfile = "m16def.dat"                                    
    

    $crystal = 1000000                                         


    Config Porta = Output
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output



               Do
    Wait 1


    Toggle Porta.0
    toggle Porta.1
    toggle Porta.2
    toggle Porta.3
    toggle Porta.4
    toggle Porta.5
    toggle Porta.6
    toggle Porta.7

    toggle Portb.0
    toggle Portb.1
    toggle Portb.2
    toggle Portb.3
    toggle Portb.4
    toggle Portb.5
    toggle Portb.6
    toggle Portb.7

    toggle Portc.0
    toggle Portc.1
    toggle Portc.2
    Toggle Portc.3
    toggle Portc.4
    toggle Portc.5
    toggle Portc.6
    toggle Portc.7

    toggle Portd.0
    toggle Portd.1
    toggle Portd.2
    toggle Portd.3
    toggle Portd.4
    toggle Portd.5
    toggle Portd.6
    toggle Portd.7
    Loop
    End

  • #6 30 Mar 2009 22:22
    janbernat
    Poziom 38  

    No, ja bym czegoś takiego nie wymyślił...

    A czym mierzysz to napięcie?

  • #7 31 Mar 2009 06:54
    fjohny
    Poziom 9  

    miernikiem w stosunku do masy lub diodą led. Wcześniej drobne programiki działały i wyjscia działały. Zacząłem poznawać sterowanie wejsciami i coś nie wyszło chyba bo już nic nie moge realizować na tej atmedze..

    Tylko że program sie wgrywa, weryfikuje wiec nie wiem czy mam uwalony układ czy co.. Podpowiedzcie coś.

  • #8 31 Mar 2009 07:25
    _Robak_
    Poziom 33  

    Zrob pprogramy dwa, jeden w ktorym wystawiasz zera na wyjscie i sprawdz czy tak jest, oraz drugi gdzie wystawiasz jedynki. Jesli nie bedzie dzialac napisz, ale okresl co to znaczy nie dziala ;)

  • #9 31 Mar 2009 08:33
    fjohny
    Poziom 9  

    nie działa - program ma zapalać i gasić wyjścia (wszystkie) ale tego nie realizuje pomimo wgranego przedstawionego powyżej programu. Wgrałem też program który wcześniej działał i również nie działa - żadne wyjścia nie są wystawiane..

    Układ program przyjmuje i nie wykrywa żadnych problemów (verify OK)

  • #10 31 Mar 2009 08:41
    _Robak_
    Poziom 33  

    Nie dziala, to znaczy? Pokaz ustawienia fusow

  • #11 31 Mar 2009 09:14
    sinuh3
    Poziom 17  

    atom1477 napisał:
    Na moje oko odczytuje tak:
    Code:

    A = PortB


    Ot i cały problem.


    A nie powinno być

    Code:

    A = PinB

  • #12 31 Mar 2009 10:51
    atom1477
    Poziom 43  

    Nie. Wtedy to nie był by problem.

  • #13 31 Mar 2009 22:04
    janbernat
    Poziom 38  

    Spróbuj wywalić End i po każdym "toggle" wstawić "Wait 1"

  • #14 01 Kwi 2009 11:13
    slawko_k
    Poziom 33  

    daj coś takiego. musi działać.

    Code:

    config porta=output
    do
      porta=0
      wait 1
      porta=255
      wait 1
    loop
    end


    jeśli nie działa to albo porty uwalone albo źle mierzysz i wydaje ci się że nie działa a działa

  • #15 02 Kwi 2009 21:08
    fjohny
    Poziom 9  

    slawko_k; niestety ten program u mnie nie działa, natomiast nie było żadnych problemów z wgraniem go do uC. Zamieszczam ustawienia fusebit mojej atmegi.

    jak podpiąc wejścia pod atmega 16? // spalona atmega?

  • #16 02 Kwi 2009 21:26
    fjohny
    Poziom 9  

    uzupełniłem powyższy program o dodatkowe porty i nadal nie ma na wyjściu sygnałów ani względem + ani względem -.

    Czy dobrze mam ustawione fuse bity? gdzie jeszcze mogę coś podejrzec?

  • #17 02 Kwi 2009 21:32
    slawko_k
    Poziom 33  

    nie wiem co ci podpowiedzieć?
    co podajesz na reset? najlepiej zostaw w powietrzu. może procek cały czas jest w resecie
    czy program testujesz w wpiętym programtorem? jeśli tak to odepnij.

  • #18 03 Kwi 2009 06:52
    fjohny
    Poziom 9  

    testuję w dwojaki sposób, raz z prrogramatorem a raz bez niego. Najlepsze jest to że przy tym podłączeniu (bo jest takie samo cały czas) działały początkowo programy wystawiające wyjscia. Dopiero gdy zacząłem próbować pisać programy z obsługą wejść coś się sknociło. Chyba będę zmuszonykupić nowy uC...

  • #19 02 Mar 2010 20:05
    fjohny
    Poziom 9  

    ech, w końcu znalazłem rozwiązanie, tylko wytłumaczcie mi co jest nie tak...

    taki program działa:

    Code:
    config pind.6=input
    
    reset portd.6
    config portb.0=output
    reset portb.0
    do
         debounce pind.6,1,wlacz_led,sub
    loop
    wlacz_led:
         toggle portb.0
    return



    zaś taki banalny nie:

    Code:
    Config Pind.6 = Input
    
    reset portd.6

    config portb.0=output
    reset portb.0

    do
         If Pind.6 = 1 Then
         Toggle Portb.0
    loop
      end if


    w powyższym przykładzie dioda mruga chaotycznie, niezależnie od stanu wejścia.
    Pytanie : DLACZEGO?

  • #20 02 Mar 2010 20:14
    atom1477
    Poziom 43  

    fjohny napisał:

    Code:
    Config Pind.6 = Input
    
    reset portd.6

    config portb.0=output
    reset portb.0

    do
         If Pind.6 = 1 Then
         Toggle Portb.0
    loop
      end if


    A cóż to za kwiatki?

  • #21 02 Mar 2010 21:12
    slawko_k
    Poziom 33  

    nawet jak zmienisz kolejność loop z end if co jest bardziej niż oczywiste to twój program po podaniu 1 na wejście będzie non sto zmieniał stan diody więc ciągle będzie ona świecić. po podaniu 0 na wejście stanie w ostatnim stanie czyli zaświecona albo zgaszona.

  Szukaj w 4mln produktów
Przeglądaj produkty