Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 cze 2025, o 05:53


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 34 ]  Przejdź na stronę 1, 2  Następna strona
    Autor Wiadomość
    PostNapisane: 18 mar 2012, o 01:01 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Witam! podczas programowania portu szeregowego w atmedze wyskoczył dziwny błąd...
    error: 'UBRRH' undeclared (first use in this function)
    error: 'UBRRL' undeclared (first use in this function)
    error: 'UCSRB' undeclared (first use in this function)
    error: 'UCSRC' undeclared (first use in this function)

    dziwi mnie to gdyż deklaracja jest jak z PDF-a atmegi128 ze strony 176

    void deklaracja_USART( unsigned int ubrr)
    {

    UBRRH = (unsigned char)(ubrr>>16);
    UBRRL = (unsigned char)ubrr;
    // wlaczenie odbiornika i przerwania
    UCSRB = (1<<RXEN1)|(1<<RXC1);
    // 8 bitów 1 bit stopu
    UCSRC = (3<<UCSZ0);
    }



    i zastanawia mnie jeszcze jedno jak deklarowac, które dane odbiornika dotycza którego usarta


    aa i w fusebitach wyłączony jest M103C



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 08:29 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Tu panuje odwieczny standard jak w każdym procku AVR

    zatem nie UBRRH tylko UBRR0H
    nie UBRRL tylko UBRR0L

    nie UCSRB tylko UCSR0B
    nie RXEN tylko RXEN0
    nie UCSZ0 tylko UCSZ00

    analogicznie dla pozostałych nazw

    to oczywiście dla UART0 a jest jeszcze UART1, więc tutaj też analogicznie jak wyżej byłoby

    nie UBRRH tylko UBRR1H

    i tak dalej

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 15:28 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Dziekuje za szybka odpowiedz, a co do przerwania tego usart bedzie wyglądac tak?

    SIGNAL(SIG_UART1_RECV)
    {
    }



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 18:25 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    UWAGA! zapomnij i wymaż ze swojej z pamięci i świadomości raz na zawsze makra:

    Kod:
    SIGNAL( wektor ) {

    }


    wymaż z pamięci

    Kod:
    #include <avr/signal.h>


    za to zacznij korzystać z:

    Kod:
    #include <avr/interrupts.h>


    i makr

    Kod:
    ISR( wektor ) {

    }


    skąd brać nazwy wektorów ??? - tu odpowiem pytaniem - a korzystasz z ECLIPSE czy z innego edytora ? Dopiero jak mi odpowiesz na to pytanie to ja odpowiem dalej.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 19:19 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    tak signal.h wielu się zapadł w pamieć naszczęście nowe kompilatory potrafią podpowiedzieć żeby tego starocia nie używać
    sam się przejechałem na złym doświadczeniu, a puki nie jest za późno jeszcze może się uda naprawić wypaczone myślenie
    bo potem ...... zresztą wielu szybko się przekona

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 22:01 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Używam WinAVR jako kompilator i programator



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 22:19 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    czyli piszesz programy w super kocim Programmers Notepad ? Zamiast w ECLIPSE ? czy zamiast w CodeBlocks albo chociaż w AVR Studio 4.xx ????

    Na ZEUSA - czy warto się na własne życzenie poddawać takim torturom cielesnym ze średniowiecza ? :(

    Toż mając ECLIPSA pod ręką - nawet nie musiałbyś otwierać i szukać czegoś na własnym dysku (chodzi mi o te makrodefinicje wektorów ale i wielu innych rzeczy)

    Ot kliknąłbyś ze 2-3 razy i już miałbyś w Eclipse pęknie otwarty plik nagłówkowy systemowy ze wszystkimi definicjami dla procka na którym piszesz program ....

    Jeśli się nadal zaprzesz i będziesz wolał się umartwiać w PN to poszukaj na własnym dysku pliku nagłówkowego dla swojego procka w folderze:

    C:\WinAVR-20100110\avr\include\avr

    i zajrzyj do niego - tam znajdziesz w środku nazwy wktorów jeszcze dla starych makr SIGNAL a obok nich już nowe odpowiedniki nazw wektorów dla makr ISR() .... te nowe nazwy wektorów będą miały tam zawsze końcówkę _vect

    ..... z ciekawości masz może książkę "Mikrokontrolery AVR Język C Podstawy programowania" ?????

    A jeśli masz ? to zajrzałeś może do lekcji VIDEO które są umieszczone na dołączonej płycie DVD ? a jeśli nie - to może w końcu warto ?????

    zapewniam cię że one w 5 minut pozwolą ci przejść w świat ECLIPSE - ok ? ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 22:41 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Co do książki to mam i chyba przekonałeś mnie co do eclipsa... ogólnie uczyłem się C podstaw trochę z internetu, trochę od znajomych itp, aż w końcu kupiłem książkę... ale na razie jestem na około 50str. (brak czasu) na pewno zobaczę eclipsa :) i wtedy w eclipsie jak sprawdzić ten wektor?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2012, o 23:58 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    a to może przeczytaj i obejrzyj to: ;)

    http://mirekk36.blogspot.com/2012/03/ec ... nazwy.html

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 21:59 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    W końcu znalazłem troche wolnego czasu i przerzuciłem się na ECLIPSE jednak pojawił się problem... kompilator wywala mi komendy: DDRx PINx PORTx na samej górze mam:
    #include <avr/io.h>
    #include <avr/delay.h>
    #include <avr/interrupt.h>

    dziwi mnie to, bo na zwyklym WinAVR działa normalnie


    Dodam jeszcze jedną sensacje... obojętnie co wpisze program i tak się kompiluje :D


    **** Budowanie of configuration Release for project matryca ****

    make all
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega128 matryca.elf
    AVR Memory Usage
    ----------------
    Device: atmega128

    Program: 1906 bytes (1.5% Full)
    (.text + .data + .bootloader)

    Data: 62 bytes (1.5% Full)
    (.data + .bss + .noinit)


    Finished building: sizedummy


    **** Build Finished ****



    Ostatnio edytowano 27 mar 2012, o 22:40 przez Piotrek121, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 22:22 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Przenoszenie programu z PN do eclipse nie jest takie proste , w sumie szkoda no ale to tak jakby edlina do worda porównywać :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 22:59 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    A zdefiniowałeś procesor do swojego projektu w Eclipse ? bo coś mi się zdaje że nie ?

    A obejrzałeś folmy/lekcje VIDEO na DVD ? o tym jak się działa w Eclipse, jak się definiuje procesor, częstotliwość itp ?

    Za mało piszesz żeby można było coś pomóc - sorki

    Gdy ja pierwszy raz działałem i poznawałem Eclipse a nie miałem żadnych książek czy poradników i musiałem się męczyć z tym kilka miesięcy - to dla mnie nie było wymówką że np w AVR Studio 4.18 mi działa a w Eclipse nie - szukałem dotąd aż znalazłem - bo przecież ECLIPSE to poważne i wielkie narzędzie z którego korzystają tysiące ludzi a nie kilku nawiedzonych ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 23:01 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Piotrek121 napisał(a):
    Dodam jeszcze jedną sensacje... obojętnie co wpisze program i tak się kompiluje :D


    To akurat nie żadna sensacja tylko twój prosty i to opisany przeze mnie i pokazany na filmach błąd.....

    naprawdę szkoda że się tyle namęczyłem z tymi filmikami a potem ich nikt nie ogląda i odkrywa sensacje, czasem to jest frustrujące :(

    Kompiluje ci się wszystko bo nie masz domyślnie AutoSave ustawione a sam też nie wpadłeś na pomysł żeby zapisać to co zmieniasz w projekcie przed każdą kompilacją..... i to masz pokazane w filmach na DVD

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 23:27 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Proszę mi wybaczyć, ale atmega128 została zdefiniowana wraz z częstotliwością tak jak na filmiku, owszem mam wyłączone autosave, lecz przed kompilacja sam zapisuje plik, co mogę jeszcze dodać...
    Po mimo wywalenia błędów kompilator i tak wypuszcza hex
    Obrazek
    przykładowe błędy, które mi wywaliło



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2012, o 23:50 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ok teraz mamy już jakiś konkret. Napisz jeszcze z jakiej wwrsji eclipsa korzystasz , czy tej z książki ? Czy sam coś instalowałeś? Bo błąd jest dziwny to fakt. A i spakuj może swój projekt do zipa i podeślij mi na maila to sprawdzę

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 21:31 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Pojawił się kolejny problem, a mianowicie odbieram tylko 7 bitów zamiast 8 moja deklaracja i kod przerwania wygląda tak:

    void deklaracja_USART( unsigned int ubrr)
    {

    UBRR1H = (unsigned char)(ubrr >> 16);
    UBRR1L = (unsigned char)ubrr;
    UCSR1B = (1<<RXEN1)|(1<<RXC1);
    UCSR1C = (3<<UCSZ01);
    }






    ISR( USART1_RX_vect )
    {
    if(licznik == bajty) licznik = 0;
    tablica[licznik] = UDR1;
    licznik +=1;
    }

    moge dodac, ze przy linijce UBRR1H = (unsigned char)(ubrr >> 16); wywala mi warninga : right shift count >= width of type



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 21:36 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Piotrek121 napisał(a):

    UBRR1H = (unsigned char)(ubrr >> 16);

    moge dodac, ze przy linijce UBRR1H = (unsigned char)(ubrr >> 16); wywala mi warninga : right shift count >= width of type


    No ja na miejscu kompilatora też bym dostał zawrotu głowy jakby mi ktoś kazał zawartość 16-bitowej zmiennej przesunąć o 16 bitów w prawo ;) ...... obejrzyj sobie te moje rysunki dotyczące przesunięć bitowych w książce ;) zobacz co się stanie ze wszystkimi ważnymi bitami - wylecą poza bajt i spadną na podłogę ;) ...... albo to literówka to 16 .... albo nie wiem gdzie kolega podpatrzył taki kod ? Mam nadzieję że nie w książce ? (kurka wodna - oby)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 22:02 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Ups... mój błąd... coś musiałem źle przeczytać, w tabeli dla 11059200 i prędkości 115200 mam 5 lecz to i tak nic nie zmieniło :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 22:13 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ja już pisałem, że tak na sucho z opowieści to nic nie pomogę - bo można tylko wróżyć. Pokaż kod po poprawkach - tylko cały - bo błędów mogłeś jeszcze narobić gdzieś indziej - chociażby np w definicji zmiennej licznik.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 22:16 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Proszę, to mój kod


    Cytuj:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




    Ogólnie mój program działa tak: uC odbiera 24 bajty a nastepnie multipleksujac dane (0 i 1) wyswietla na matrycy led



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 23:01 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ok odniosę się na razie do niektórych błędów a jest ich jak mi się wydaje CAŁA masa :(

    po pierwsze czyż kolega w ogóle NIC a NIC nie czytał na temat pętli ???? przecież to ZGROZA pisać takie coś:

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Nawet powiedziałbym ZGROZO - MASAKRA , proszę jak najszybciej pozmieniać wszystkie te części kodu które można wrzucić w pętle - bo tego się czytać nawet nie da - toż to można zapisać w 1 linii kodu!!!, pierwszy i ostatni raz udzielam takiej podpowiedzi:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Poza tym TOTALNE szastanie - bo tak trzeba powiedzieć - typami danych. Wynika to albo z niefrasobliwości, która w programowaniu procków doprowadzi kiedyś do szaleństwa ;) albo co gorsze z braku podstawowej wiedzy na temat typów danych w C ..... oj trzeba to doczytać, i nigdy na drugi raz nie definiować np zmiennej :

    int licznik; (czyli 16-bitowej) dla zmiennej, która w trakcie pracy przyjmie wartości TYLKO od 0 do 24 - czyli zmieści się w jednym bajcie a zatem spokojnie można użyć typu jedno-bajtowego uint8_t !

    proszę się jak najszybciej przestawić na typy AVR GCC czyli:

    Kod:
    uint8_t
    uint16_t
    uint32_t


    a nie tam:

    Kod:
    unsigned short int
    unsigned int


    itd - bo będą kłopoty później oj będą ..... a zresztą czy kolega lubi tak się katować żeby aż tyle klepać w tą klawiaturę ?

    Kolejna rzecz - co to kurczę JEST ? ;) za fantasmagoria ???????

    Kod:
    UBRR1H = (unsigned char)(ubrr >> 5);


    No - nie nawet nie podam jak ma być - bo nie dość, że kolega ma podane to jak na patelni i w mojej książce to także WYRAŹNIE w nocie PDF ...... no ale widać, że coś nieteges jeszcze z przesunięciami bitowymi - a jeśli tak? to lepiej dopytać jak się czegoś nie rozumie zamiast zgadywać albo pisać tak długi program - bo błąd błędem pogania :(

    Te zmienne:

    Kod:
    volatile int poziom = 1;
            volatile int licznik = 0;


    poza tym że mogą być uint8_t a nie int, to są to zmienne globalne .... i o ile poziom można zainicjalizować bo ma mieć wartość inną niż 0 to po co inicjalizacja zerem - zmiennej licznik ?

    Skoro zmienna bajty to stała - to po jakiego grzyba ją definiować jako zmienną i jeszcze porównanie robić ze zmienną w przerwaniu ?

    Kod:
    if(licznik == bajty) licznik = 0;


    a wszystko jeszcze na deser dzieje się tu na liczbach 16-bitowych, które i tak nigdy nie przekroczą zakresu 8-bitów - a ile na to pamięci RAM jest marnowanej oraz ile czasu jest tracone to aż strach się bać pomyśleć.

    ----------------

    Kolejna rzecz - już komuś w innym wątku pisałem - proszę w kodach zamieszczanych na tym forum używać przesunięć bitowych zamiast tych durnych makr _BV() ..... bo od razu widzę, że jest problem ze zrozumieniem przesunięć - i te makra w niczym nie pomogą tylko będą przeszkadzać...... Zastrzegam sobie na przyszłość, że będę pomagał tylko gdy ktoś będzie pisał tu kody zgodnie z dobrą sztuką programowania OK ?

    Następny kwiatek:

    jest sobie funkcja:

    Kod:
    int poziomo() {

    }


    Ok już nie będę płakał że nie ma void w nawiasach gdzie brak argumentów - ale na ZEUSA jest określony typ zwracanego rezultatu na int - a gdzie jest zwracany ten rezultat za pomocą return ????? Albo on jest potrzebny albo nie ..... albo piszemy program przejrzyście albo nie .....

    ale tu dzieje się widzę gorsza rzecz - kolega TOTALNIE nie zwraca uwagi na WARNINGI ..... !!!!!!

    czy kolega programuje już w ECLIPSE ????? sorki jeśli się powtarzam z tym pytaniem - ale w ECLIPSE nie dałoby rady nie zauważyć TYCH WARNIGÓW/BŁĘDZIORÓW bo tak trzeba je nazwać w tym mini kodzie ..... no sorki - ale tak pisać programów to nie można ..... albo tak pisać z setkami warningów i potem zwracać się z pytaniem na forum jakby nigdy nic się nie stało i nikt nie widział nigdzie żadnego warninga :(

    ---------------------

    no i teraz do meritum...... to co się dzieje w pętli głównej to totalny MISZ-MASZ ..... coś tam się zeruje za pomocą tej funkcji poziomo() a potem w kółko miliony IF'ów sprawdzają trzysta tysięcy razy na sekundę tablicę, która napełniana ma być w przerwaniu zupełnie asynchronicznie - totalnie w oderwaniu od tego co dzieje się w przerwaniu ...... Jak to ma prawo działać - toż to CHAOS i nic więcej :(

    ----------------------

    ale kolejna masakra to:

    Kod:
    _delay_ms(czas);


    NIGDY w życiu nie wolno przekazywać do _delay_ms() argumentów w postaci zmiennej. Wprawdzie masz procek ATmega128 to nawet nie zwracasz uwagi na to że nagle po takiej operacji i po kompilacji przybywa ci parę niepotrzebnych kilobajtów we Flashu. Gdybyś robił na ATtiny2313 to już by wykorzystanie pamięci po tej linijce wyniosło np 120% .....

    -----------------------

    OK - sporo opisanych tu przeze mnie problemów nie ma bezpośredniego wpływu na złe działanie tego programu - ale nieziemsko utrudnia analizę i pracę - nie tylko mi czy komukolwiek na forum (tak nawet nie wypada przedstawiać kodu) ..... ale co najgorsze tobie samemu sprawia poważny problem w analizie i stąd nawarstwiają się błędy i brak czytelności kodu

    proponuję to wszystko popoprawiać i wyprowadzić ładnie a wtedy będziemy się mogli skupić na rzeczywistym problemie OK ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 23:25 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Wiem wiem, i takiej reakcji się spodziewałem, co do pierwszego to sam to napisałem ręcznie w celu sprawdzania czy problem leży po stronie wyświetlania, czy odbioru danych... wtedy wystarczy zmienić dane odpowiedniego bajtu z tablicy (co z reszta można zauważyć na tablica[] 4,7,13,16.
    Co do typu zmiennych to fakt... mój błąd, nie zastanawiałem się nad zakresami... jak na razie chodziło mi o to, aby działało wszystko, później wszystko bym modernizował.
    Co do definiowania zmiennych i przypisywanie wartości 0, to sam dla siebie w razie czego będzie mi łatwiej zmienić, sprawdzić szczególnie gdy program jest w fazie testów.
    Odnośnie _delay_ms(czas); i zmiennej wiem, ze nie należy tak robić, lecz często się przydaje, gdy chce się choćby zmniejszyć jasność dając w pętle wartość czas, u mnie przydawało się to bardzo przy jasności wyświetlacza przy multipleksacji i jak na razie widać nie zmieniłem na konkretną wartość.

    I odnośnie głównej pętli... niestety, ale nie jestem w stanie na chwilę obecną nic innego wymyśleć... niestety, w celu stworzenia mniejszej płytki wyświetlacza musiałem podłączać pod różne porty, które niestety są rozstrzelone po całym uC... tez mi się to za bardzo nie podoba no ale co poradzę...

    Postaram się zmodyfikować kod, aby tak nie raził w oczy... ale niestety nie wydaje mi się, abym na moim poziomie nie zrobię wszystkiego tak, aby było tak jak powinno być.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2012, o 23:45 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    No to dlatego proponuję pomoc - i małymi kroczkami ale dojdziemy jak ten kod polepszyć - tylko od początku warto pisać dobrze a nie, wie, wiem, wiem ale... ale .... to czy siamto ;)

    Dlatego podpowiedziałem jak coś ubrać w pętlę....

    Sporo powtarzających się rzeczy można ubrać w oddzielne funkcje -żeby oczyścić widok pętli głównej w main

    a na prawdę nie ma tu strasznie dużej ilości zmiennych żeby nie można było tego kodu szybko uporządkować i to spokojnie w twoim zakresie ..... no ale to ty musisz robić a ja mogę pomóc ..... bo odwrotnie to będzie ciężko, żeby to ja robił ....

    I potem będziemy mogli skupić się na najważniejszej rzeczy czyli jak odbierać dane - poza tym jak ty je w ogóle wysyłasz ? czym? skąd ? co ile ? ....

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 00:13 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    mam napisany programik, który jak na razie wysyła dane po naciśnięciu przycisku.. wysyła równe 24bajty o wczesniej ustalonej zawartości i jest on napisany w 100% dobrze.



    Napisałem kod, który jest w miarę przejrzysty, jednak nadal nie rozumiem problemu linijki UBRR1H = (uint8_t)(baud>>5); liczę na jakaś podpowiedź...

    Cytuj:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 11:44 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Piotrek121 napisał(a):
    mam napisany programik, który jak na razie wysyła dane po naciśnięciu przycisku.. wysyła równe 24bajty o wczesniej ustalonej zawartości i jest on napisany w 100% dobrze.


    Ok załóżmy na razie że dobrze.

    Piotrek121 napisał(a):
    Napisałem kod, który jest w miarę przejrzysty, jednak nadal nie rozumiem problemu linijki UBRR1H = (uint8_t)(baud>>5); liczę na jakaś podpowiedź...


    O nie, ja już zadawałem ci pytanie czy czytałeś rozdział o przesunięciach bitowych i mi nie odpowiedziałeś. Pytałem czy zaglądałeś do noty PDF do rozdziału o inicjalizacji UART i kodu w C, który tam jest pokazany. A nawet jeśli czegoś tam nie zrozumiałeś to można było o to dopytać.... Dlatego ja odpowiem w postaci kolejnego pytania:

    A dlaczego ty chcesz to przesuwać o 5 bitów ???? (przedtem próbowałeś przesuwać o 16 bitów)

    Wytłumacz mi to szczegółowo - co mają na celu te dwie linijki kodu:

    Kod:
            UBRR1H = (uint8_t)(baud>>5);
            UBRR1L = (uint8_t)baud;


    to znaczy jak ty to rozumiesz ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 13:26 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Juz widze mój błąd... źle zrozumiałem jedno pojęcie... to w takim razie gdzie mam przypisać wartość UBRR?

    To deklaracja z noty katalogowej

    Cytuj:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 14:04 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Mnie chodzi o to że w nocie masz:

    (ubrr>>8);

    rozumiesz ? przecież wartość __UBRR którą masz w kodzie to 16 bitów z czego jeden od lewej to starszy bajt i trzeba go przecież przesunąć w lewą stronę o 8 bitów żeby wpadł w miejsce młodszego bajtu dokładnie i wtedy przypisujesz go tak jak miałeś do UBRR1H a młodszy bajt słowa __UBRR przypisujesz bez żadnego przesunięcia robiąc co najwyżej rzutowanie typu na uint8_t

    czy to teraz dla ciebie jest jasne ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 14:20 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Teraz już tak :P prawdę mówiąc przed tym postem to zauważyłem... to w takim razie jeżeli już wiem, ze wartość ubrr będzie miała wartość 5 to gdzie mam ją wpisać? mam zrobić coś tego typu? #define ubrr 5? (biorąc deklaracje z noty, która wcześniej skopiowałem)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 15:13 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    hej hej zaraz zaraz - ale czy ty zaglądałeś w ogóle do kodów na DVD ???? testowałeś tam kody dla RS232 ??? widziałeś jak tam jest rozwiązana inicjalizacja RS232 ???? bo na prawdę zaczynamy grać jak w "ciu-ciu-babkę" :(

    żadne #define ubrr

    Masz tam w przykładach takie coś:

    Kod:
    #define UART_BAUD 9600      // tu definiujemy interesującą nas prędkość
    #define __UBRR F_CPU/16/UART_BAUD-1  // obliczamy UBRR dla U2X=0


    po choinkę ty w swoim kodzie wyżej piszesz takie dziwne rzeczy w tym ten cały FOSC albo gdzieś tam dalej F_CPU .... nawet nie wolno definiować F_CPU w kodzie

    Kod:
    #define FOSC 11059200// Clock Speed
    #define BAUD 115200
    #define MYUBRR FOSC/16/BAUD-1


    W mojej książce nie znalazłbyś takich kuriozalnych przykładów - wręcz piszę o tym że niektórzy robią takie dziwne rzeczy i nie należy tak robić - tylko tak jak to opisuję dalej w książce a ty co?

    na prawdę mnie to martwi - bo kurczę tyle w książce i w kodach poświęciłem czasu żeby opisać te podstawy i to bardzo dobrze, ty piszesz że masz niby książkę ale kody w tym zakresie piszesz jakieś z kosmosu .... więc ja już nie wiem co jest nie tak?

    A wybacz mi ale to jest za duża strata czasu żebym teraz na forum pisał to samo co w książce . Ja mogę coś wyjaśnić jak są wątpliwości itd .... ale to mi wygląda na to jakbyś w ogóle nie zaglądał do książki bo pytasz od początku świata o wszystko i o podstawy - łącznie z tymi przesunięciami bitowymi albo z tym jak definiować sobie jakąś stałą np _UBRR bo może być MYUBRR albo jeszcze inna ....

    coś tu jest nie tak - przykro mi, i zrozum mnie, że nie po to tyle się rozpisywałem w książce żeby teraz przepisywać na nowo to wszystko na forum w jednej odpowiedzi do ciebie, może za chwilę to samo w odpowiedzi do innej osoby

    no tak być nie może

    tak się składa - że WSZYSTKIE ODPOWIEDZI na te tutaj podstawowe pytania o inicjalizację RS232 masz na 100000% w książce

    a także na pewno masz w książce o co chodzi z tym przesuwaniem bitowym liczb

    ..... przyznaj się - masz tą książkę? czy nie masz ? Używasz Eclipse i przykładów z DVD czy nie ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 kwi 2012, o 15:23 
    Offline
    Użytkownik

    Dołączył(a): 18 mar 2012
    Posty: 55
    Pomógł: 0

    Napisze trochę inaczej... pisze tak jak w książce jednak mam cały czas ten sam problem... a mianowicie nie odbiera mi ostatniego bajtu, i wnioskuje, ze czegoś brakuje w moim kodzie, lub coś źle robię, dlatego tez sięgam do internetu. Owszem mam książkę, używam eclipse co do przykładów używam części kodu z nich. Rozumiem tą irytacje i sam już mam powoli dość tego... no ale zależy mi na tej tablicy tak więc niestety, powoli bo powoli ale próbuje coś ogarnąć, co prawda z dużymi błędami, no ale cóż... jestem początkujący pod względem pisania w C i wszystkiego nie jestem w stanie się nauczyć na pamięć... Co do tego przesunięcia bitowego to po prostu źle zrozumiałem całe działanie tego, jednak po ponownym przeczytaniu już rozumiem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 34 ]  Przejdź na stronę 1, 2  Następna strona

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO