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

zamiennik fukcji bascom w c

xysio_ 23 Lut 2009 21:31 2981 43
  • #1 6194848
    xysio_
    Poziom 18  
    w bascomie mamy funkcję typu
    Dat = Wpis.x   

    gzie(o ile dobrze rozumuję) x decyduje który znak z ciągu wpis wyciągamy, mój problem polega na tym, że muszę napisać to samo tylko że w C, czy ma ktoś jakieś pomysły?
  • #2 6194918
    elektryk
    Poziom 42  
    dat=wpis[x] ?
  • #3 6194932
    dawid512
    Poziom 32  
    Napisz dokładnie czy chodzi ci o konkretny bit czy element z tablicy.
  • #4 6195046
    xysio_
    Poziom 18  
    mowa o konkretnym bicie, ogólnie próbuje przepisać program z bascoma na c
    skrót programu
    Dim X As Byte
    Dim Wpis As Word
    
    Dat Alias Portb.7
    Ena Alias Portb.6
    Clk Alias Portb.5
    Wpis = &B1000000111000101     '33221 To jest konfiguracja syntezy (AM) krok 1kHz
    Wpis = 27180                  'To jest początkowa watrość częstotliwości 27,18MHz
    0 Step -1
    
       Dat = Wpis.x               'Tu wartość Wpis wysyłamy do syntezy bit po bicie.
    
       Waitms 5
       Clk = 1
       Waitms 5
       Clk = 0
       Waitms 5
    Next X
    
  • #5 6195049
    M. S.
    Poziom 34  
    Kolega to potrzebuje do sterowania syntezą Saa1057.

    Instrukcja



    w pętli wpisuje do zmiennej Dat kolejne bity zmiennej dwubajtowej o nazwie Wpis

    Czyli jeśli Dat = Wpis.0 to w zmiennej Dat powinien znaleźć się najmłodszy bit zmiennej Wpis.
    Do syntezy potrzebna jest funkcja podająca na końcówkę portu kolejne bity dwubajtowej zmiennej Wpis począwszy od najstarszego.

    Bascom umożliwia proste działanie na poszczególnych bitach dowolnej zmiennej bądź stałej. Zapisuje się to: Zmienna.bit. Cóż, w C trzeba kombinować

    Przedstawiony program powinien wyglądać w Bascomie tak

    Dim X As Byte
    Dim Wpis As Word
    
    Dat Alias Portb.7
    Ena Alias Portb.6
    Clk Alias Portb.5
    Wpis = &B1000000111000101     '33221 To jest konfiguracja syntezy (AM) krok 1kHz
    Wpis = 27180                  'To jest początkowa watrość częstotliwości 27,18MHz
    For x = 15 to 0 Step -1
    
       Dat = Wpis.x               'Tu wartość Wpis wysyłamy do syntezy bit po bicie.
    
       Waitms 5
       Clk = 1
       Waitms 5
       Clk = 0
       Waitms 5
    Next X 


    Cała tą pętelkę Bascom zastępuje jedną instrukcją

    Shiftout Dat , Clk , Wpis , 1 , 16 , 2


    Wot tiechnika.
  • #6 6195083
    Konto nie istnieje
    Poziom 1  
  • #7 6195104
    xysio_
    Poziom 18  
    dzięki M.S przeoczyłem to

    Atom1477 kompilator przyjął zobaczymy czy będzie działać
  • #8 6195149
    Konto nie istnieje
    Poziom 1  
  • #9 6195188
    xysio_
    Poziom 18  
    podstawiłem i tak jak wcześniej przyjmuje tylko że bez dwukropka
    Dat = (Wpis >> x) & 1; 

    teraz męczę się z ustawieniem wpisu na fm krok 10khz
  • #11 6195243
    xysio_
    Poziom 18  
    oki teraz jeszcze czy wie ktoś jak przeskoczyć to
    Wpis = &B1000000111000101   
    Wpis = 27180

    nie przyjmuje operatora &B, znalazłem już ustawienia na fm 10khz 1100010010000101
  • #12 6195264
    Konto nie istnieje
    Poziom 1  
  • #13 6195296
    xysio_
    Poziom 18  
    dobra skleiłem coś takiego brakuje narazie definicji portów itd ale cz moglibyście na to spojrzeć
    #include<avr/io.h>
    
    unsigned char dane,dat,ena,clk;
    
    #define OSC 4
    // definicja funkcji opóźniającej
    void waitms(unsigned char x)
    {
    unsigned char a, b; // zmnienne licznikowe
    for( ; x > 0; --x) // ta pętla zostanie wykonana x-razy
    for(b = 10; b > 0; --b) // a ta 10 razy
    for(a = 25 * OSC; a > 0; --a) // natomiast ta 100 razy
    __asm("nop"); // dodatkowa instrukcja opóźniająca o 1 cykl
    // razem to da opóźnienie ok. x * 1ms
    // x od 0 do 255
    // gdy x = 0 to opóźnienie = 256ms
    }
    
    int main()
    {
    int i;
    dane=1100010010000101 ;
    dane=11815;
    dat=0;
    ena=0;
    clk=0;
    waitms(5);
    ena=1;
    waitms(5);
    clk=1;
    waitms(5);
    for(i=0;i=15;i++)
    {
    
    dat = (dane >> i) & 1; 
    waitms(5);
    clk=1;
    waitms(5);
    clk = 0;
    waitms(5);
    
    }
    ena=0;
    waitms(5);
    clk = 1;
    waitms(5);
    clk = 0;
    waitms(5);
    ena = 1;
    waitms(5);
    dat = 1;
    clk = 1;
    waitms(100);
    
    }
    


    Dodano po 59 [sekundy]:

    datasheeta mam, to a nim głównie się opierałem budując układ
  • #14 6195335
    Konto nie istnieje
    Poziom 1  
  • #15 6195371
    xysio_
    Poziom 18  
    dzięki atom1477 ale właśnie zauważyłem że te impulsy zapakowałem do zmiennych a nie na porty muszę poprawić
  • #16 6195390
    Tomek-85
    Poziom 14  
    Zmienną 'dane' zadeklarowałeś typu unsigned char (osiem bitów).
    W programie próbujesz wklepać w nią 16 bitów. Oczywiście robisz to
    niepoprawnie bo najpierw te twoje zera i jedynki musisz zamienić na
    postać dziesiętną lub szesnastkową i dopiero wykonać przypisanie wartości
    do zmiennej typu int a nie char
    pzdr.
  • #17 6195411
    Konto nie istnieje
    Poziom 1  
  • #18 6195475
    xysio_
    Poziom 18  
    poprawiłem(tak mi się wydaje)
    #include<avr/io.h>
    
    int dane;
    
    #define OSC 4
    // definicja funkcji opóźniającej
    void waitms(unsigned char x)
    {
    unsigned char a, b; // zmnienne licznikowe
    for( ; x > 0; --x) // ta pętla zostanie wykonana x-razy
    for(b = 10; b > 0; --b) // a ta 10 razy
    for(a = 25 * OSC; a > 0; --a) // natomiast ta 100 razy
    __asm("nop"); // dodatkowa instrukcja opóźniająca o 1 cykl
    // razem to da opóźnienie ok. x * 1ms
    // x od 0 do 255
    // gdy x = 0 to opóźnienie = 256ms
    }
    
    int main()
    {
    int i;
    dane=1100010010000101 ;
    dane=10111000100111;//11815 binarnie
    PORTB=!_BV(5);
    PORTB=!_BV(7);
    PORTB=_BV(5);
    waitms(5);
    PORTB=_BV(7);
    waitms(5);
    PORTB=_BV(6);
    waitms(5);
    PORTB=!_BV(6);
    waitms(5);
    for(i=0;i=15;i++) 
    {
    
    PORTB = (dane >> i) & 1; 
    waitms(5);
    PORTB=_BV(6);
    waitms(5);
    PORTB=!_BV(6);
    waitms(5);
    
    }
    PORTB=!_BV(7);
    waitms(5);
    PORTB=_BV(6);
    waitms(5);
    PORTB=!_BV(6);
    waitms(5);
    PORTB=_BV(7);
    waitms(5);
    PORTB=_BV(5);
    PORTB=_BV(6);
    waitms(100);
    
    }
    


    Dodano po 47 [sekundy]:

    a część radiową odpaliłem już wcześniej(synteza sterowana z PC) i jestem nawet zadowolony
  • #19 6195503
    Konto nie istnieje
    Poziom 1  
  • #20 6195540
    xysio_
    Poziom 18  
    wywalił ostrzeżenie ale zignorowałem

    Dodano po 1 [minuty]:

    ale jak dam hexa to wtedy ten patent z rozdzielaniem nie zadziała
  • #21 6195558
    Konto nie istnieje
    Poziom 1  
  • #22 6195564
    xysio_
    Poziom 18  
    jestem całkowicie początkujący, tu nie wiedziałem co zrobić to przepisałem tak ja było w bascomie czyli konfiguracja a potem częstotliwość
    
    Wpis = &B1000000111000101     '33221 To jest konfiguracja syntezy (AM) krok 1kHz
    Cls : Lcd Wpis : Wait 1
    Gosub Saa
    Wpis = 27180                  'To jest początkowa watrość częstotliwości 27,18MHz
    

    a dane poprawiłem jak radziłeś
    dane=0xC485 ;
    dane=0x2E27;


    edit:
    nie zwróciłem uwagi na Gosub dane z częstotliwości przeniosłem na koniec
  • #23 6195607
    Konto nie istnieje
    Poziom 1  
  • #25 6195631
    Konto nie istnieje
    Poziom 1  
  • #26 6195648
    xysio_
    Poziom 18  
    podobnie jest w bascomie tylko że po funkcji saa(Gosub saa), teraz przeniosłem drugi wpis z częstotliwością na koniec programu jak w bascomie, jesli się mylę to wytłumacz mi jak wpisuje się częstotliwość

    Dodano po 3 [minuty]:

    ogólnie na warsztacie jest słabo z sygnałem ale to 118,15 mhz jest wystarczające czyli jakieś 107,3 coś tak jest to odbicie jakiejś stacji chciałbym na razie napisać program który by ustawiał na tą częstotliwość, ogólnie łapie dobrze radio ojca T, pik i lustro rmf
  • #27 6195673
    Konto nie istnieje
    Poziom 1  
  • #28 6195683
    xysio_
    Poziom 18  
    wielkie dzięki teraz dopiero łapie
  • #29 6195754
    Konto nie istnieje
    Poziom 1  
  • #30 6198283
    Dr.Vee
    VIP Zasłużony dla elektroda
    gcc udostępnia (niestandardowy) prefiks 0b do podawania liczb w formacie binarnym.

    Od siebie dodam, że warto te bity ponazywać jakoś - 5, 6 i 7 nie mówia czytelnikowi za wiele, a kod oprócz kompilatora musza jeszcze czytać ludzie :)

    Pozdrawiam,
    Dr.Vee
REKLAMA