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

[Atmega8535][BASCOM] Zapis do eepromu

Component 11 Wrz 2008 15:26 2041 11
  • #1 5525557
    Component
    Poziom 10  
    Witam

    Jak wpisac takie dane do eepromu

    
    
    Wyjscie4:
    
    ' -------------- wyjscie 4 -------------- '
    
    Set Porta.0
    Set Porta.1
    Reset Porta.2
    
    ' -- Turn on the buffer selected by A2-A0,or restore the previously connected channel -- '
    
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Set Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5
    
    
    
    
    
    
    
    
    
    Wejscie4:
    ' -------------- wejscie 4 -------------- '
    Waitms 10
    Set Portd.0
    Set Portd.1
    Reset Portd.2
    Reset Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5
    


    najlepiej oddzielnie. osobno wejscie osobno wyjscie.

    ale mi errory wywala

    Invalid datatype
    Bytes to read may not be 0
    variables not dimensions

    zas kiedy pisze wedle składni ksiażkowej

    $eeprom
    Wyjscie4:
    Set Porta.0 , Set Porta.1 , Reset Porta.2 , Waitms 10 , Reset Portd.0 , Reset Portd.1 , Set Portd.2 , Set Portd.3 , Waitms 10 , Reset Portc.4 , Waitms 10 , Set Portc.5 , Waitms 10 , Set Portc.4 , Waitms 10 , Reset Portc.5
    
    Wejscie7:
    Waitms 10 , Reset Portd.0 , Set Portd.1 , Set Portd.2 , Reset Portd.3 , Waitms 10 , Reset Portc.4 , Waitms 10 , Set Portc.5 , Waitms 10 , Set Portc.4 , Waitms 10 , Reset Portc.5,
    
    


    wywala ze skłądnia za duza i to nie sa dane liczbowe;/

    HELP
  • #3 5525848
    Component
    Poziom 10  
    uuu ;/

    to teraz jestem w kropce ;/
  • #4 5525857
    ZbeeGin
    Poziom 39  
    Jest wyjście, ale dość pokrętne: obsługa bootloadera. Choć przy odobinie "pomyślunku" można te dane jakoś sensownie zapisać liczbowo, a potem program główny będzie je "odtwarzał". Taki interpreter kodów.
  • #5 5525877
    Component
    Poziom 10  
    Jestem w trakcie konstrukowania routera sygnałow analogowych wizji do dyplomu. skacze z forum na forum zeby znaleźć jakies rozwiazanie bo nie jestem biegły w programowaniu... grrr pojawia mi sie szereg problemów

    Uzywam Bascoma AVR.

    Router MAX456 programuje za pomoca atmela 8535

    całośc wygla mniej wiecej tak:

    8 wejscie i 8 wyjsc. w srodku router MAX456
    [Atmega8535][BASCOM] Zapis do eepromu
    napisałem program....
    
    $regfile = "m8535.dat"
    $crystal = 8000000
    
    
    
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
    Config Lcd = 16 * 2
    
    Config Porta = &B11111111       'port a obsługuje WYJSCIA routera
           Porta = &B11111111
    
    Config Portd = &B11111111       'port d obsługuje WEJSCIA routera
           Portd = &B00000000
    
    Config Portc = &B11111111       'wr PC5 i latch PC4 wyjsciami
           Portc = &B00010000
    
    Cls
    Lcd "switch video"
    
    
    Do
    
    
    
    
    ' -------------- wyjscie 5 -------------- '
    
    Reset Porta.0
    Reset Porta.1
    Set Porta.2
    
    ' -- Turn on the buffer selected by A2-A0,or restore the previously connected channel -- '
    
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Set Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ' -------------- wejscie 5 -------------- '
    Waitms 10
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Reset Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5
    
    
    Loop
    
    End
    
    
    


    według tego schematu
    [Atmega8535][BASCOM] Zapis do eepromu
    tutaj opisałem wejscia i wyjscia routera
    [Atmega8535][BASCOM] Zapis do eepromu
    program działa tak wstepnie i router elegancko przepuszczał mi sygnały z generatora PAL tak na sztywno

    określiłem WYJSCIE okresliłem WEJSCIE i na oscyloskopie mam piekne sygnały.

    Chce teraz tak zaprogramowac atmela by np jednym przyciskiem wybierałbym sobie dowolne wyjscie drugim np wejscie a trzecim akceptował i puszczał całość.

    router działa tak ze najpierw musze okreslic wyjscie dodac WR i LATCH potem wejscie dodac WR i LATCH i dopiero całosc puszczona w rouer otwiera wskazane przejscie np z wejscia 7 do wyjscia 4.

    problem teraz z tym ze zeby to działało chciałem najpierw wszystkie wyjscia i wejscia wpisac do eepromu a potem wybierac.. scalac w jeden program i wrzucac na router.


    no i tu sie pojawia problem bo za bardzo nie wiem jak to zrobic ;/
    a teraz sie dowiaduje ze tego tak nie zrobie jak zakłądałem;/

    no chyba ze mozna to jakos prościej robic ;/
  • #6 5525953
    ZbeeGin
    Poziom 39  
    Component napisał:
    Chce teraz tak zaprogramowac atmela by np jednym przyciskiem wybierałbym sobie dowolne wyjscie drugim np wejscie a trzecim akceptował i puszczał całość.

    Skorzystaj ze zmiennych które to zmieniać +/- będziesz przez przyciski, a jak naciśniesz trzeci klawisz to program zawartość tych zmiennych wyśle jako gotowe ciągi 0 1. Oczywiście bity które nie mają być zmieniane trzeba zamaskować przez operacje AND, i wkomponowywać nowe dane przez operację OR. Ewentualnie jeśli trzebaby niektóre bity umieścić na innych pozycjach to masz instrukcję SHIFT.


    Taki schemat działań. A0..A2 oraz D0...D3 są na jednym porcie Port, z czego Port0...Port2 to A0..A2 a Port3...Port6 to D0...D3.
    Do                                         'pętla 
      If PinX = 0 Then                         ' jak jakiś pin = 0 to zwiększymy numer 
        Incr Kanalwe 
        If kanalwe > 7 Then kanalwe = 0        ' i jak poza zakresem to wracamy na początek 
      End If 
      If PinY = 0 Then 
        Incr Kanalwy 
        If Kanalwy > 7 Then Kanalwy = 0 
      End If 
      If PinZ = 0 Then                         ' jeśli jakiś tam pin = 0 to wysyłamy 
        ' komponujemy dane 
        tmp = Port And &B11111000              ' odczytaj to co było obecne na pinach wyjściowych i pozbadź się tych które zmieniamy. 
        Port = tmp Or Kanalwe                  ' teraz wpisz numer kanału w bity których się pozbyliśmy 
    
        tmp = Port And &B10000111              ' jak wyżej tylko inne bity 
        tmp2 = Kanalwy                         ' trzeba zapamiętać 
        Shift tmp2, left, 3                    ' podsuń bity na miejsce 
        Port = tmp Or tmp2                     ' i zespól podobnie jak wyżej 
        
        ' teraz WR i LATCH sobie ustaw 
      
      End If 
    
      'tu dodaj by to np. wyświetlał 
      ' Cls 
      ' Lcd "WE:"; Kanalwe; "  WY:"; Kanalwy 
    
    Loop                                       'i tak w kółko
  • #7 5526003
    Component
    Poziom 10  
    ZbeeGin napisał:
    Component napisał:
    Chce teraz tak zaprogramowac atmela by np jednym przyciskiem wybierałbym sobie dowolne wyjscie drugim np wejscie a trzecim akceptował i puszczał całość.

    Skorzystaj ze zmiennych które to zmieniać +/- będziesz przez przyciski, a jak naciśniesz trzeci klawisz to program zawartość tych zmiennych wyśle jako gotowe ciągi 0 1. Oczywiście bity które nie mają być zmieniane trzeba zamaskować przez operacje AND, i wkomponowywać nowe dane przez operację OR. Ewentualnie jeśli trzebaby niektóre bity umieścić na innych pozycjach to masz instrukcję SHIFT.



    hmmmm
    to jest jakby jedna procedura uruchamiajaca wyjscie
    przynajmniej tak to rozumuje po analizie tego przebiegu czasowego
    MAX456

    
    
    ' -------------- wyjscie 5 -------------- '
    
    Reset Porta.0
    Reset Porta.1
    Set Porta.2
    
    ' -- Turn on the buffer selected by A2-A0,or restore the previously connected channel -- '
    
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Set Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5 



    - całość.

    On to robi pokolei z tego co rozumuje i dopiero otwiera to wyjscie...

    to samo potem z wejsciem


    
    ' -------------- wejscie 5 -------------- '
    Waitms 10
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Reset Portd.3
    
    ' -------------- wr i latch -------------- '
    
    Waitms 10
    Reset Portc.4
    Waitms 10
    Set Portc.5
    Waitms 10
    Set Portc.4
    Waitms 10
    Reset Portc.5 


    i na dodatek całosc złaczona w jeden listing w LOOPie i puszczona na router.

    zastanawiałem sie jak zapisac cały taki listing albo poszczegolne czastki w formie zmiennej ?
    tu jest tylko ustawienia i resetowanie bitów.
    Kazdy set i reset rozpatrywac osobno ?

    a to jest tylko Wejscie 5 i wyjscie 5 a musze zapisac 8 wejsc i 8 wyjsc

    czyli 16 takich listingów... ;/


    <bezradny>

    EDIT:

    o teraz przenaliazuje to co mi zapisałes :)
  • #8 5526013
    ZbeeGin
    Poziom 39  
    Patrz dodany później listing. Jest tylko jedna procedurka ustalające dane i jedna wysyłająca. Nie trzeba pisać 16 takich...
  • #9 5538380
    Component
    Poziom 10  
    ZbeeGin napisał:

    Taki schemat działań. A0..A2 oraz D0...D3 są na jednym porcie Port, z czego Port0...Port2 to A0..A2 a Port3...Port6 to D0...D3.


    ale przepiąć ja fizycznie na jeden port ?

    8535 na 4 porty A B C D i chciałem je rozdzielic osobno na funkcje czyli np tak jak według listingu

    A to wyjscia routera a D to wejscia

    ---

    musze przysiąść i ostro przeanalizować twoje rozwiazanie :)
  • #10 5538413
    ZbeeGin
    Poziom 39  
    Tylko pamiętaj, że przy przepisywaniu sygnałami WR i LATCH stany na obu portach mają być ustalone. Inaczej stracisz kontrolę nad routingiem.
  • #11 5542267
    Component
    Poziom 10  
    ZbeeGin napisał:


    Taki schemat działań. A0..A2 oraz D0...D3 są na jednym porcie Port, z czego Port0...Port2 to A0..A2 a Port3...Port6 to D0...D3.


    Do                                         'pętla 
      If PinX = 0 Then                         ' jak jakiś pin = 0 to zwiększymy numer 
        Incr Kanalwe 
        If kanalwe > 7 Then kanalwe = 0        ' i jak poza zakresem to wracamy na początek 
      End If 
      If PinY = 0 Then 
        Incr Kanalwy 
        If Kanalwy > 7 Then Kanalwy = 0 
      End If 
      If PinZ = 0 Then                         ' jeśli jakiś tam pin = 0 to wysyłamy 
        ' komponujemy dane 
        tmp = Port And &B11111000              ' odczytaj to co było obecne na pinach wyjściowych i pozbadź się tych które zmieniamy. 
        Port = tmp Or Kanalwe                  ' teraz wpisz numer kanału w bity których się pozbyliśmy 
    
        tmp = Port And &B10000111              ' jak wyżej tylko inne bity 
        tmp2 = Kanalwy                         ' trzeba zapamiętać 
        Shift tmp2, left, 3                    ' podsuń bity na miejsce 
        Port = tmp Or tmp2                     ' i zespól podobnie jak wyżej 
        
        ' teraz WR i LATCH sobie ustaw 
      
      End If 
    
      'tu dodaj by to np. wyświetlał 
      ' Cls 
      ' Lcd "WE:"; Kanalwe; "  WY:"; Kanalwy 
    
    Loop                                       'i tak w kółko




    If PinX = 0 Then                         ' jak jakiś pin = 0 to zwiększymy numer 
        Incr Kanalwe 
        If kanalwe > 7 Then kanalwe = 0        ' i jak poza zakresem to wracamy na początek 
      End If 
      If PinY = 0 Then 
        Incr Kanalwy 
        If Kanalwy > 7 Then Kanalwy = 0 
      End If 


    PIN czy PORT ? wejscia mam do D wyjscia do A

    > 7 ?

    wejscia na porcie D zmieniam na 4 pierwszych a wyjscia na porcie A zmieniam na 3 pierwszych bitach
    ?



    If PinZ = 0 Then                         ' jeśli jakiś tam pin = 0 to wysyłamy


    nie kapuje.
    3 port do tego uzyc ?

    ZbeeGin napisał:
    Tylko pamiętaj, że przy przepisywaniu sygnałami WR i LATCH stany na obu portach mają być ustalone. Inaczej stracisz kontrolę nad routingiem.


    przepisywaniu sygnałami WR i LATCH ?

    latch i WR jest stałe tak samo jak

    
    ' -- Turn on the buffer selected by A2-A0,or restore the previously connected channel -- '
    
    Reset Portd.0
    Reset Portd.1
    Set Portd.2
    Set Portd.3 


    ta fopcja routera z tego co rozumiem (bo działa dobrze) musi byc uzyta zaraz po deklaracji wyjscia.

    :)
  • #12 5542308
    ZbeeGin
    Poziom 39  
    Component napisał:
    PIN czy PORT ? wejscia mam do D wyjscia do A

    PIN, chcesz się dostać na wejście i w dodatku na konkretną końcówkę. Wyjaśnienia: nota katalogowa AVR w dziale opisującym porty.

    Component napisał:
    > 7?
    wejscia na porcie D zmieniam na 4 pierwszych a wyjscia na porcie A zmieniam na 3 pierwszych bitach
    ?

    A ile wejść i wyjść posiada router? Czy można ustawić kanał 10?

    Component napisał:
    nie kapuje.
    3 port do tego uzyc ?

    Do zatwierdzania zmian. Skąd program ma wiedzieć, że skończyłeś ustawiać numery kanałów we i wy?

    Component napisał:
    przepisywaniu sygnałami WR i LATCH ?

    Jeszcze raz przeczytaj notę katalogową układu. Jeśli w dalszym ciągu nie wiesz do czego są te sygnały: czytaj aż zrozumiesz.
REKLAMA