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 w 2025? 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 17 maja 2025, o 15:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 5 maja 2020, o 20:43 
    Offline
    Nowy

    Dołączył(a): 03 lis 2019
    Posty: 13
    Pomógł: 0

    Witam
    Dzisiaj oglądałem film Pawła część 3 na youtube o multipleksowaniu po 19 minuty napotkałem na problem. Podczas deklaracji zmiennej uint8_t cyfra[4]; w pliku nagłówkowym wpisuję extern uint8_t cyfra[4]; po czym kompiluje. Wtedy pojawia mi sie błąd.

    Obrazek
    ObrazekObrazekObrazekObrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 20:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 lut 2014
    Posty: 164
    Pomógł: 3

    Nie dodałeś nigdzie czego dotyczy błąd - zgłoszenia konsoli. Na szybko prawdopodobnie zmienna powinna być opatrzona jako volatile.

    _________________
    ::::::: C ::::::::::
    :::::: C++ :::::::::



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 21:11 
    Offline
    Nowy

    Dołączył(a): 03 lis 2019
    Posty: 13
    Pomógł: 0

    Lex_ napisał(a):
    Nie dodałeś nigdzie czego dotyczy błąd - zgłoszenia konsoli. Na szybko prawdopodobnie zmienna powinna być opatrzona jako volatile.

    Błąd jest na pierwszy zdjęciu od góry



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 21:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 lut 2014
    Posty: 164
    Pomógł: 3

    Zamieść kod wszystkich swoich plików po kolei bo jest nie ścisłość - numery wierszy gdzie występuje błąd się nie zgadzają.

    _________________
    ::::::: C ::::::::::
    :::::: C++ :::::::::



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 21:47 
    Offline
    Nowy

    Dołączył(a): 03 lis 2019
    Posty: 13
    Pomógł: 0

    Lex_ napisał(a):
    Zamieść kod wszystkich swoich plików po kolei bo jest nie ścisłość - numery wierszy gdzie występuje błąd się nie zgadzają.

    Zaznaczyłem ci teraz na zdjęciach gdzie występuje błąd.Dodałem volatile do tej zmiennej ale nie pomogło
    Pierwsze zdjęcie to main.c
    Obrazek
    Następny plik to multipleks.c. Pierwsza cześć
    Obrazek
    Teraz będzie druga część tego samego pliku
    Obrazek
    Plik nagłówkowy multipleks.h
    Obrazek

    Plik main.c:

    #include <avr/io.h>
    #include "MULTIPLEKS/multipleks.h"


    int main(void)
    {
    multipleks_init();
    }

    multipleks.c

    #include "multipleks.h"
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <avr/interrupt.h>
    const uint8_t cyfry[] PROGMEM =
    {
    ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),//0
    ~(SEG_A|SEG_B|SEG_C),//1
    ~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G),//2
    ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G),//3
    ~(SEG_A|SEG_C|SEG_F |SEG_G),//4
    ~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G),//5
    ~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),//6
    ~(SEG_A|SEG_C|SEG_B|SEG_F),//7
    ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),//8
    ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G),//9
    0xff//10
    };
    volatile uint8_t cyfra[4];
    void multipleks_init(void)
    {
    SEGEMENTY_KIERUNEK = 0xff;
    SEGMENTY_PORT =0xff;

    ANODY_KIERUNEK |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4;
    ANODY_PORT |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4;
    TCCR0 |=(1<<WGM01);
    TCCR0 |=(1<<CS02)|(1<<CS00);
    OCR0 |=38;
    TIMSK |=(1<<OCIE0);
    }
    ISR(TIMER0_COMP_vect)
    {
    static uint8_t licznik;
    ANODY_PORT =(ANODY_PORT | MASKA_ANODY);
    SEGMENTY_PORT =pgm_read_byte(&cyfry[cyfra[licznik]]);
    ANODY_PORT =(ANODY_PORT & ~MASKA_ANODY) | (~(1<<licznik) & MASKA_ANODY);
    licznik++;
    if(licznik>3) licznik=0;
    }

    multipleks.h

    #ifndef MULTIPLEKS_MULTIPLEKS_H_
    #define MULTIPLEKS_MULTIPLEKS_H_
    #define SEGMENTY_PORT PORTC
    #define SEGEMENTY_KIERUNEK DDRC
    #define ANODY_PORT PORTB
    #define ANODY_KIERUNEK DDRB

    #define ANODA_1 (1<<PB0)
    #define ANODA_2 (1<<PB1)
    #define ANODA_3 (1<<PB2)
    #define ANODA_4 (1<<PB3)

    extern volatile uint8_t cyfra[4];

    #define SEG_A (1<<0)
    #define SEG_B (1<<1)
    #define SEG_C (1<<2)
    #define SEG_D (1<<3)
    #define SEG_E (1<<4)
    #define SEG_F (1<<5)
    #define SEG_G (1<<6)
    #define SEG_DP (1<<7)
    #define MASKA_ANODY (ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4)
    void multipleks_init(void);

    #endif /* MULTIPLEKS_MULTIPLEKS_H_ */



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 22:03 
    Offline
    Użytkownik

    Dołączył(a): 05 wrz 2017
    Posty: 169
    Pomógł: 31

    Jeśli kompilator nie rozpoznaje typu uint8_t, to prawdopodobnie nie masz dodanej definicji typu z pliku stdint.h



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 22:17 
    Offline
    Nowy

    Dołączył(a): 03 lis 2019
    Posty: 13
    Pomógł: 0

    abel11 napisał(a):
    Jeśli kompilator nie rozpoznaje typu uint8_t, to prawdopodobnie nie masz dodanej definicji typu z pliku stdint.h

    Dodałem deklarację #include <stdint.h> ale nadal mam błąd podczas określania typu uint8_t ale jak zmienię typ zmiennej na int lub long to wszystko mi działa.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2020, o 22:41 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Zmień kolejność include w pliku multipleks.c.
    Najpierw inkludujesz plik .h w którym są użyte typy uint8_t, o których kompilator nic nie wie.

    Poza tym zapoznaj się z topic7402.html zanim Różowy przyjdzie i przetłumaczy swoim różowym paskiem, jak należy wstawiać kod na forum :lol:

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 maja 2020, o 01:25 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 323
    Lokalizacja: Rybnik
    Pomógł: 23

    W pliku multipleks.c 1-wszą linię przenieś pod linię 4.

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 maja 2020, o 05:19 
    Offline
    Moderator
    Avatar użytkownika

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

    DOKŁADNIE jak mówią koledzy wyżej


    linię zaznaczoną strzałką czyli własnego INKLUDA dawaj ZAWSZE po inkludach systemowych (po tych w nawiasach ostrych)

    Obrazek

    a widząc jak to piszesz polecam jednak zdecydowanie zacząć od książki Bluebooka
    https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    bo w niej masz wyjaśnionych pełno takich podstaw

    _________________
    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 maja 2020, o 07:25 
    Offline
    Nowy

    Dołączył(a): 03 lis 2019
    Posty: 13
    Pomógł: 0

    Dzięki za pomoc wasze rady mi pomogły.



    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: 11 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 13 gości


    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