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



Teraz jest 23 kwi 2024, o 18:21


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: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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: 27225
Lokalizacja: Szczecin
Pomógł: 1041

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 5 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO