logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Bascom][Atmega128] martwe przerwania Int4-7

Madergames9 08 Kwi 2010 17:40 1664 8
  • #1 7935799
    Madergames9
    Poziom 15  
    Witam.
    Na początku napomknę, że przeszukałem najpierw zasoby internetu i elektrody. Jednak odpowiedzi nie znalazlem. Więc do rzeczy, tak mi przypasowało, że chciałbym wykorzystać przerwanie Int4 i tak zostało skonfigurowane
    Enable Interrupts
    Enable Int5
    Config Int5 = Low Level
    On Int5 Sprawdz

    Jednak brak jakiejkolwiek reakcji gdy zostanie podany stan niski z wyjścia "Penirq" układu DS 7843. Mierzyłem miernikiem napięcia na końcówce bezpośrednio Atmegi i po dotknięciu panela dotykowego pojawia sie niskie napięcie bliskie Gnd a normalnie jest to napięcie zasilania. Mam zainstalowanego Bascom-a AVR w wersji 1.11.9.5. Przyznam, że nie sprawdzałem przerwań Int0-1, ale z tego co zdążyłem się doczytać to właśnie z przerwaniami INT4-7 są jakieś problemy. Skoro to jest a z helpa po polsku wynika, że można to uruchomić to co robię, źle..?

    Pozdrawiam
  • #2 7936037
    landy13
    Poziom 31  
    Może to że podłączasz do Int4 a w programie masz Int5?
  • #3 7936098
    Madergames9
    Poziom 15  
    Oki dobra uwaga, ale to w sumie moje przejęzyczenie. Aż sprawdziłem po raz kolejny schemat połączeń. Faktycznie mam podłączone obecnie pod Int5 i jest to zgodne z tym co napisałem wczesniej. Po prostu sprawdzałem i tu i tu i jest tak samo...

    Pozdrawiam
  • #4 7936446
    mpietras
    Poziom 17  
    Najpierw skonfigurowałbym przerwanie potem je włączył. Drugą kwestią jest to, że przed etykietą "Sprawdź" musi być "END" (nie koniecznie bezpośrednio przed)
  • #5 7936609
    Madergames9
    Poziom 15  
    Korzystając z książki Pana Wiązani i Help-a po polsku dla Basc-oma składnia obsługi jest taka sama jak wyżej. Zresztą operowałem przerwaniem, ale od Timer1 i to właśnie tak działało. . . Czytałem w internecie o kłopocie z tymi przerwaniami, ale nijak nie doczytałem się rozwiązania... kto tutaj z kolegów zna ten problem i posiada rozwiązanie..?. Czy może to błąd biblioteki...?
  • #6 7937569
    Madergames9
    Poziom 15  
    Koledzy takie łebskie głowy, a nie ma nikogo kto mógłby mi pomóc...?

    Pozdrawiam
  • #7 7937568
    ZbeeGin
    Poziom 39  
    Fuse M103C przestawiony?

    Dodano po 54 [sekundy]:

    Jesteśmy na forum a nie na wyścigach. Przestawiłeś kolego tego fuse jak Mega przyszła ze sklepu?
  • #8 7937587
    Madergames9
    Poziom 15  
    To ześmy sie zgrali...
    Fusebit Extended P ustawiony na "1:Atmega128 Mode"

    Oki oki sorki, ale ja to tak bez nerwów :D . Czasami udaje mi się samemu rozwiązać problem zanim na forum ktoś odpowie, albo tematy pozostają bez echa, ajk np programowy SPI i AD7843. Naprawdę port zmienia stan, jak potraktuje się go normalnie jako wyjście, ale jako przerwanie jest głuchy jak pień.

    Dodano po 1 [godziny] 10 [minuty]:

    A więc koledzy sprawa rozwiazana. Dzięki za chęci i niechęć. Dla potomnych z podobnym problemem podaję co i jak. Trochę się zawziąłem i pogrzebałem w bibliotece m128def.dat i prawie na samym końcu jest coś takiego:
    [INTS]
    INT0  = $002 ; External Interrupt0 Vector Address
    INT1  = $004 ; External Interrupt1 Vector Address
    INT2  = $006 ; External Interrupt2 Vector Address
    INT3  = $008 ; External Interrupt3 Vector Address
    INT4 = $00a ; External Interrupt4 Vector Address
    INT5  = $00c ; External Interrupt5 Vector Address
    INT6 = $00e ; External Interrupt6 Vector Address
    INT7  = $010 ; External Interrupt7 Vector Address


    oraz zaraz pod:

    [INTLIST]
    count=34
    INTname1=INT0,$002,EIMSK.INT0,EIFR.INTF0
    INTname2=INT1,$004,EIMSK.INT1,EIFR.INTF1
    INTname3=INT2,$006,EIMSK.INT2,EIFR.INTF2
    INTname4=INT3,$008,EIMSK.INT3,EIFR.INTF3
    INTname5=INT4,$00a,EIMSK.INT4,EIFR.INTF4
    INTname6=INT5,$00c,EIMSK.INT5,EIFR.INTF5
    INTname7=INT6,$00e,EIMSK.INT6,EIFR.INTF6
    INTname8=INT7,$010,EIMSK.INT7,EIFR.INTF7


    Według noty katalogowej w tabeli 23 napisano

    
    Vector   Adress
        2      $0002    INT0    External Interrupt Request 0
        3      $0004    INT1    External Interrupt Request 1
        4      $0006    INT2    External Interrupt Request 2
        5      $0008    INT3    External Interrupt Request 3
        6      $000A    INT4    External Interrupt Request 4
        7      $000C    INT5    External Interrupt Request 5
        8      $000E    INT6    External Interrupt Request 6
        9      $0010    INT7    External Interrupt Request 7



    Jak widać różnica jest w literówce adress-u i dotyczy to Int 4 do 6. Po zmianie samej literówki (wielkość czcionki) przerwanie, które do tej pory było martwe odblokowało się (Int5). Mozna jeszcze dopisać po jednym zerze, ale nie wiem czy to coś zmienia, gdyż pomogła sama zmiana literówki. Jak się przyjżeć dalszej części biblioteki takie małe literki w adress-ie występują w innych miejscach. Można by było się domyślać, że może mieć to wpływ na inne programy, które nie działaja jak należy. Na wszelki wypadek dobrze zrobić sobie kopię biblioteki... licho nie spi.. :D

    Pozdrawiam
  • #9 7940694
    Madergames9
    Poziom 15  
    Niestety pospieszyłem się z radością. Oczywiście wczoraj to po wgraniu działało, ale radości już dzisiaj nie ma. Jak tylko dopisuję coś do podprogramu to znowu przerwanie nie działa. Próbowałem na różne sposoby i wygląda na to, że nie zwsze to chce załapać, raz tak, raz nie więc zgłupiałem. Skoro jednak to wogóle zaskoczyło więc znaczy, że jest to błąd biblioteki (tak myślę). Więc problem jest nadal.
    Pozdrawiam
REKLAMA