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

[ATMEGA16][BASCOM]Program - kopiowanie bitów

Popak 09 Lip 2008 17:16 2352 17
REKLAMA
  • #1 5327481
    Popak
    Moderator na urlopie...
    Witam

    Wybaczcie mi ale jestem lejkiem w pisaniu programów bo dopiero zaczynam w Bascomie.
    Do problemu.
    Chce przepuścić sygnał z LPT (Program DiscoLitez) przez ATmege16 i mam mały problemik. Mam jeden program ale on działa na zasadzie OFF/On więc on odpada. Więc postanowiłem sprobować swoich sił i napisać samemu, ale mam problem.
    Program ma działać na zasadzie:
    Na wejściu (PortC.0) pojawia się stan 0 (na przykład z układu ULN2803) to na wyjściu (PortA.0) pojawia się stan 1 wysoki. Gdy na wejściu (PortC.0) zniknie stan 0 to na wyjściu (PortC.0) pojawia się stan 0. I tak po kolei wszystkie osiem kanałów. Mam nadzieję że zrozumieliście :)
    Kawałem mojego programu ;)

    $regfile = "m16def.dat"
    
    
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Postb.7
    
    Config Lcd = 20 * 2
    
    
     Config Portc = Input
     Config Porta = Output
     Config Portd = Output
    
     Set Portd.7
    
     Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
    
    
    Cls
    
    Lcd "Napis 1"
    Lowerline
    Lcd "Napis 2"
    
    Wait 2
    
    Cls
    
    Lcd "Napis 3"
    Lowerline
    Lcd "Napis 4"
    
     Do
    
    
    
     Loop
    
    End


    Jak to zrobić?

    Pozdrawiam

    Poprawiłem tytuł i przeniosłem do właściwego podforum
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [zumek]
  • REKLAMA
  • Pomocny post
    #3 5328409
    dawid512
    Poziom 32  
    Cytat:
    Na wejściu (PortC.0) pojawia się stan 0 (na przykład z układu ULN2803) to na wyjściu (PortA.0) pojawia się stan 1 wysoki.


    Np. tak:

    If PINC.0 = 0 then
    PORTA.0 = 1
    end if
    
    


    Jak robisz coś takiego:
    Config Portc = Input 
    to lepiej zrób to tak:
    DDRC = 00000000


    A potem jeszce to wszystko podciągnij do 1 tak:

    Już nie wspomnę o wyłączeniu JTAGA bo inaczej zapomnij o korzystaniu z portu C.

    Już rozumiesz?
  • #4 5328486
    Popak
    Moderator na urlopie...
    Witam

    JTAGA?
    O co chodzi? ;)

    Pozdrawiam
  • #5 5328495
    dawid512
    Poziom 32  
    JTAG wyłączony?

    I zrób mała modyfikację:
    If PINC.0 = 0 then
    PORTA.0 = 1
    else 
    PORTA.0 = 0
    end if
    


    Dodano po 6 [minuty]:

    Cytat:
    JTAGA?
    O co chodzi? Wink


    To takie coś które ci nie jest teraz potrzebne a jedynie utrudnia ci zycie. Chcesz wiedziec wiecej to google..

    Przejdź na zakładkę LOCKS AND FUSE BITS o ile programujesz z Bascoma.
    Znajdziesz takie coś jak JTAG i zmień to na disabled a potem write fsh.
  • #6 5328632
    Popak
    Moderator na urlopie...
    Szukam w bascomie LOCKS AND FUSE BITS i nie mogę znaleźć :(
  • REKLAMA
  • #7 5328645
    dawid512
    Poziom 32  
    Napisz program, skompiluj, wciśnij F4 i wyskoczy okienko.
    Możesz teraz zaprogramować procka i tam znajdziesz tę zakładkę.
  • #8 5328697
    Popak
    Moderator na urlopie...
    Mam :) dzięki

    Czy ma wyglądać tak:
    $regfile = "m16def.dat"
    
    
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Postb.7
    
    Config Lcd = 20 * 2
    
    
     Ddrc = 00000000
     Config Porta = Output
     Config Portd = Output
    
     Set Portc = 1
     Set Portd.7
    
     Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
    
    
    Cls
    
    Lcd "Napis 1"
    Lowerline
    Lcd "Napis 2"
    
    Wait 2
    
    Cls
    
    Lcd "Napis 3"
    Lowerline
    Lcd "Napis 4"
    
     Do
    
     If PINC.0 = 0 then
    PORTA.0 = 1
    else
    PORTA.0 = 0
    End If
    
     If Pinc.1 = 0 Then
    Porta.1 = 1
    else
    Porta.1 = 0
    End If
    
     If Pinc.2 = 0 Then
    Porta.2 = 1
    else
    Porta.2 = 0
    End If
    
     If Pinc.3 = 0 Then
    Porta.3 = 1
    else
    Porta.3 = 0
    End If
    
     If Pinc.4 = 0 Then
    Porta.4 = 1
    else
    Porta.4 = 0
    End If
    
     If Pinc.5 = 0 Then
    Porta.5 = 1
    else
    Porta.5 = 0
    End If
    
     If Pinc.6 = 0 Then
    Porta.6 = 1
    else
    Porta.6 = 0
    End If
    
     If Pinc.7 = 0 Then
    Porta.7 = 1
    else
    Porta.7 = 0
    End If
    
     Loop
    
    End
  • #9 5328704
    dawid512
    Poziom 32  
    Cos takiego ale to...
    Set Portc = 1 
    masło maślane...

    Polecenie Set to wystawienie stanu wysokiego.

    Zadeklaruj sobie jeszcze jakiego kwarcu używasz to chyba umiesz? :D
  • REKLAMA
  • #12 5330116
    Popak
    Moderator na urlopie...
    dawid512 napisał:
    Cos takiego ale to...
    Set Portc = 1 
    masło maślane...

    Polecenie Set to wystawienie stanu wysokiego.

    Zadeklaruj sobie jeszcze jakiego kwarcu używasz to chyba umiesz? :D


    Witam
    Jak mam umieścić ten
    Set Portc = 1 


    Ciągle sprawdzam i nie mogę dojść :| Ciągle mam na wyjściu stan wyskoki i wogule nie reaguje na wejście stanu niskiego. :cry:

    Pozdrawiam
  • #14 5330558
    Popak
    Moderator na urlopie...
    Chce zrobić aby atmega pracowała tak samo jak układ ULN2803 tylko odwrotnie (wszystkie 8Bity)
    Zrobiłem tak:
    $regfile = "m16def.dat"
    
    $crystal = 8000000
    
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Postb.7
    
    Config Lcd = 20 * 2
    
    
     Ddrc = 00000000
     Config Porta = Output
    
     Portc = 1
    
     Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
    
    
    Cls
    
    Lcd "Napis 1"
    Lowerline
    Lcd "Napis 2"
    
    Wait 1
    
    Cls
    
    Lcd "Napis 3"
    Lowerline
    Lcd "Napis 4"
    
     Do
    
     Porta = Pinc Xor &HFF
    
     Loop
    
    End

    I pierwszy kanał PortC.0 i PortA.0 działa tak jak powinno ale na pozostałyh jest ciągle stan wysoki. Czemu tak :|

    Pozdrawiam
  • REKLAMA
  • #16 5330777
    Popak
    Moderator na urlopie...
    O przepraszam wklepałem nie to co trzeba :)

    Jak pisałem, pierwszy bit działa ok ale na pozostałych jest ciągle stan wysoki
    $regfile = "m16def.dat"
    
    $crystal = 8000000
    
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Postb.7
    
    Config Lcd = 20 * 2
    
     Config Porta = Output
     Config Portc = Input
    
     Set Portc
    
     Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
    
    Cls
    
    Lcd "Napis 1"
    Lowerline
    Lcd "Napis 2"
    
    Wait 1
    
    Cls
    
    Lcd "Napis 3"
    Lowerline
    Lcd "Napis 4"
    
     Do
    
     Porta = Pinc Xor &HFF
    
     Loop
    
    End
  • #17 5334154
    Popak
    Moderator na urlopie...
    Witam

    Programik ruszył :) zmieniłem z 'set portc' na 'portc=255' i jest wszystko ok.

    Pozdrawiam
REKLAMA