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



Teraz jest 30 mar 2026, o 22:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 26 maja 2014, o 15:37 
Offline
Nowy

Dołączył(a): 02 kwi 2014
Posty: 3
Pomógł: 0

Witam

Jestem dopiero początkujący w tej dziedzinie techniki, i przez to niestety, ale ciągle pojawiają się jakieś

problemy. Niektóre udało mi się rozwiązać samemu, jednak teraz nie mam pojęcia co mógłbym mieć źle(a błąd jest z

pewnością banalny). Robię ćwiczenie z książki pana Mirosława o multipleksowaniu wyświetlacza LED. Wydaje mi się że

wszystko przepisałem dokładnie jak jest w książce (dostosowując to tylko do mojego mikroprocesora Atmega88pa,

ustawiając tryb CTC na timerze 0A). Tutaj kody programów:

Main.c
Cytuj:
#include <avr/io.h>
#include <avr/interrupt.h>

#include "d_led.h"



int main(void)
{

uint8_t cyfry[4] =
{
~(SEG_A|SEG_B|SEG_C|SEG_D),
~(SEG_E|SEG_F|SEG_A|SEG_B|),
~(SEG_A|SEG_C|SEG_D|),
~(SEG_Ą|SEG_B|),
};


d_let_init(); //inicjalizacja wyswietlacza multipleksowego

cy1=0;
cy2=1;
cy3=2;
cy4=3;

sei();

while (1)
{

}
}


d_led.c
Cytuj:
#include <avr/io.h>
#include <avr/interrupt.h>

#include "d_led.h"

volatile uint8_t cy1;
volatile uint8_t cy2;
volatile uint8_t cy3;
volatile uint8_t cy4;


void d_led_init(void)
{
LED_DATA_DIR = 0xFF; //wszystkie piny portu jako wyjscia
LED_DATA= 0xFF; //wygaszenie wszystkich katod - stan wysoki

//4 piny portu C jako wyjscia (anody)
ANODY_DIR |= CC1 | CC2 | CC3 | CC4;

//wygaszenie wszystkich wyswietlaczy - anody
ANODY |= CC1 | CC2 | CC3 | CC4;

//ustawienie TIMER
TCCR0A |= (1<<WGM01); //tryb CTC
TCCR0B |= (1<<CS00) | (1<<CS02); //preskaler 1024
OCR0A = 39; //podział przez 39
TIMSK0 |= (1<<OCIE0A); //zezwolenie na przerwanie Compare Match

}

/////////===============PROCEDURA OBSŁUGI PRZERWANIA COMPARE MATCH
ISR(TIMER0_COMPA_vect)
{
//zmienna do przelaczania kolejno anod wyswietlacza
static uint8_t licznik=1;
//cykliczne przelaczanie w kazdym przerwaniu anod kazdego wyswietlacza(negacja aby krazylo zero)
ANODY_PORT= ~licznik;

//gdy zapalony wysw. 1 podaj stan zmiennej c1
if(licznik==1) LED DATA = cyfry[cy1];

if(licznik==2) LED DATA = cyfry[cy2];
if(licznik==4) LED DATA = cyfry[cy3];
if(licznik==8) LED DATA = cyfry[cy4];

licznik <<=1; //przesuniecie zawartosci bitow licznika o 1 w lewo
if(licznik>8) licznik=1 ;
}


d_led.h
Cytuj:
#ifndef D_LED_H_
#define D_LED_H_

//definicje portów i pinów wyswietlacza uzywanych dla ulatwienia w programie

#define LED_DATA PORTD //port z podlaczonymi segmentami

//port z podlaczonymi anodami
#define ANODY_PORT PORTC

#define CC1 (1<<PC0)
#define CC2 (1<<PC1)
#define CC3 (1<<PC2)
#define CC4 (1<<PC3)

//definicje segmentów

#define SEG_A (1<<7)
#define SEG_B (1<<5)
#define SEG_C (1<<3)
#define SEG_D (1<<1)
#define SEG_E (1<<0)
#define SEG_F (1<<6)
#define SEG_G (1<<4)
#define SEG_DP (1<<2)

extern volatile uint8_t cy1;
extern volatile uint8_t cy2;
extern volatile uint8_t cy3;
extern volatile uint8_t cy4;

void d_led_init(void)

#endif /* D_LED_H_ */


i błędy
Cytuj:
**** Build of configuration Release for project wys_led ****

make all
Building file: ../d_led.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88p -

DF_CPU=8000000UL -MMD -MP -MF"d_led.d" -MT"d_led.d" -c -o "d_led.o" "../d_led.c"
../d_led.c: In function 'd_led_init':
../d_led.c:20: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
../d_led.c:39: warning: 'signal' attribute only applies to functions
../d_led.c:39: warning: 'used' attribute ignored
../d_led.c:39: warning: 'externally_visible' attribute ignored
../d_led.c:40: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
../d_led.c:57: error: old-style parameter declarations in prototyped function definition
../d_led.c:55: error: expected '{' at end of input
make: *** [d_led.o] Error 1

**** Build Finished ****


linia 20sta to ta PO pogrubionej czesci

Nie mam pojęcia gdzie brakuje jakiegoś znaku, ponieważ wydaje się że jest okej.

I drugie pytanie, w książce nie ma nic napisane o zmiennej ANODA w d_led.h. Domyślam się że to błąd w druku i w

kodzie powinno byc coś takiego?
Cytuj:
//4 piny portu C jako wyjscia (anody)
ANODY_PORT_DIR |= CC1 | CC2 | CC3 | CC4;

//wygaszenie wszystkich wyswietlaczy - anody
ANODY_PORT |= CC1 | CC2 | CC3 | CC4;


Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 15:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2012
Posty: 778
Pomógł: 9

Kod umieść w znacznikach syntax.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 16:03 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

W pliku led.h nie masz srednika po void d_led_init(void)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 18:06 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

W main.c masz: d_let_init(); //inicjalizacja wyswietlacza multipleksowego
A powinno być d_led_init(); //inicjalizacja wyswietlacza multipleksowego
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

uint8_t cyfry[4] zamien na uint8_t cyfry[5] bo definiujesz w tablicy 4 cyfry a 5 musi byc jako by 5 pusta dla tablicy chyba ze sie myle to mnie poprawcie.

Taktowanie w projekcie masz 8MHz ?

Czy ten timer jest dla twojego procka ? Patrzyles w note katalogowa ?

Wysłane z telefonu

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 18:50 
Offline
Moderator
Avatar użytkownika

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

majster napisał(a):
a 5 musi byc jako by 5 pusta dla tablicy chyba ze sie myle to mnie poprawcie.


tu się coś koledze pomyliło ze stringami (C-stringami) ... bo to łańcuchy tekstowe zawsze zakończone są zerem, jakby coś

_________________
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: 26 maja 2014, o 21:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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


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


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


....nie chciało mi się wypisywać co jest źle - porównaj sam.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 22:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

mirekk36 napisał(a):
majster napisał(a):
a 5 musi byc jako by 5 pusta dla tablicy chyba ze sie myle to mnie poprawcie.


tu się coś koledze pomyliło ze stringami (C-stringami) ... bo to łańcuchy tekstowe zawsze zakończone są zerem, jakby coś


A faktycznie :) no sorry za wprowadzenie w błąd :)

_________________
Usługi druku przestrzennego - www.drumik.pl



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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