Skocz do zawartości

Multipleksowanie wyświetlacza 7seg INTEL 8051 - problem poczatkującego


Pomocna odpowiedź

Napisano

Witam,

Potrzebuje Waszej pomocy, gdyż nie wiem już jak mam zabrać się za napotkany problem i "błądzę".

Ogolnym założeniem programu jest odczyt wartości z przetworinka i wyświetlenie jej na wyświetlaczu 7-segmentowym w postaci 0...255. Wszystko wydaje się być ok - moim jedynym problemem jest zbyt wolne "przełączanie" między segmentami. Ukazane jest to na filmiku poniżej:

https://streamable.com/1o8vu

Kolejnym wątpliwym punktem tego programu jest poniższa instrukcja. Powinna ona odpowiadać za zwiększenie/zmniejszenie prędkości przełączania (nie została dodana przeze mnie). Jest to dosyć prymitywne rozwiązanie i jak widać na załączonym obrazku słabo spełnia swoje zadanie. Niestety po próbie zastąpienia jej innym fragmentem - program przestaje działać.

if(++presc2==1)			
{
		presc2=0; 
[...]
[...]
[...]
}

Całośc kodu:


#include <reg52.h>
#include <intrins.h>
#include "lcd.h"
#include "mkd51sim.h"


unsigned char xdata Tab7s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char xdata PTSEG _at_ 0x8018;  
unsigned char xdata PTAC _at_ 0x8000;
unsigned char xdata POT0 _at_ 0x8005;
char potencjometr (void); 
unsigned char delay1;
unsigned char wyswietlacz[3] = {0,1,2};
unsigned char adc_value;

unsigned char presc2=0,segment=0;


void main(void) {

while (1)
{
//odczyt wartosci z potencjometru
POT0=0;
adc_value = potencjometr();


	if(++presc2==1)			
{
		presc2=0; 

		wyswietlacz[0]=(unsigned char)adc_value%10;
		wyswietlacz[1]=(unsigned char)(adc_value/10)%10;
			wyswietlacz[2]=(unsigned char)(adc_value/100)%10;
			segment++;
	if (segment>=3){
		segment=0;
	}
	P1=segment;
}

	PTSEG=Tab7s[wyswietlacz[segment]];

}
}	

Gość es2

Kolejnym wątpliwym punktem tego programu jest poniższa instrukcja. Powinna ona odpowiadać za zwiększenie/zmniejszenie prędkości przełączania (nie została dodana przeze mnie). Jest to dosyć prymitywne rozwiązanie i jak widać na załączonym obrazku słabo spełnia swoje zadanie. Niestety po próbie zastąpienia jej innym fragmentem - program przestaje działać.

if(++presc2==1)			
{
		presc2=0; 
[...]
[...]
[...]
}

A jak ten inny fragment wygląda?

Co do całego kodu, schemat z pewnością nie utrudniłby analizy kodu. A tak na początek, multipleksowanie bez przerwań?

Filmik nie dział u mnie. Może w normalnym formacie umieści (mp4)? Albo na Youtube?

[ Dodano: 17-04-2018, 21:23 ]

moim jedynym problemem jest zbyt wolne "przełączanie" między segmentami

Jakie jest taktowanie procesora?

Jaki to procesor? Biblioteki 8052 niewiele mówią, może to byc np 89C51RD2 a ja nie wiem co montowano w MDK51 20 lat temu.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...