Hur kan radvis 7-segments visa olika om dem är parallell?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Som jag uppfattar digitala signaler så är det 1:or och 0:or under ett visst tidsintervall. Det betyder alltså att man skickar en kod. :)

Jag förstog inte denna mening:
"CLK kockar in 16 bitar och LOAD "fryser dessa" i rätt register."

16 bit är väll storleken på information den kan skicka? 2^16 = 65536 byte.
Och vad är registret?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av sodjan »

> Som jag uppfattar digitala signaler så är det 1:or och 0:or under ett visst tidsintervall.

Nej. Eller ja.

> Det betyder alltså att man skickar en kod.

Tja, ibland är det väl det.

> 16 bit är väll storleken på information den kan skicka?

Vad syftar "den" på ??

> 2^16 = 65536 byte.

Nej. 2^16 = 65536.

> Och vad är registret?

Det som databladet kallar "register", i och för sig på engelska
men det betyder samma sak på svenska...
Användarvisningsbild
SeniorLemuren
Inlägg: 8427
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av SeniorLemuren »

Al_Bundy skrev:Jag brukar sällan lita på gammalt arduino bibliotek. Det finns faktiskt ett bibliotek till MAX7219 men det är buggigt och jag litar inte på det. Jag skulle hellre försöka sätta mig in och skriva eget bibliotek för detta.
Jag känner inte till något om arduino och dess bibliotek, men jag ställer frågan var du har hämtat uppgifterna på att dett är buggigt.

Jag tänker såhär (utan att vara Messerschmitt) att med ledning av de frågor du ställer i detta ämne så har jag svårt att tro att du skulle få till en buggfriare version inom överskådlig framtid.

Å andra sidan om det enbart är för att lära dig och du inte har bråttom med att få igång display så är det bara att kavla upp ärmarna och köra på. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av sodjan »

Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Det kommer ta tid innan jag lärt mig det där.
Kanske lika bra att köpa en färdig sats istället för att hålla på räkna bit osv hela tiden.

EDIT:
Jag återkommer med svar. Har en litet dokument om just detta ämne jag måste läsa på lite först! Höres!
P.S Jag har skickat ett mail till dig angående segementen. Kanske är intresserad om dessa passar till MAX7219/7221
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

SeniorLemuren skrev:
Al_Bundy skrev:Jag brukar sällan lita på gammalt arduino bibliotek. Det finns faktiskt ett bibliotek till MAX7219 men det är buggigt och jag litar inte på det. Jag skulle hellre försöka sätta mig in och skriva eget bibliotek för detta.
Jag känner inte till något om arduino och dess bibliotek, men jag ställer frågan var du har hämtat uppgifterna på att dett är buggigt.

Jag tänker såhär (utan att vara Messerschmitt) att med ledning av de frågor du ställer i detta ämne så har jag svårt att tro att du skulle få till en buggfriare version inom överskådlig framtid.

Å andra sidan om det enbart är för att lära dig och du inte har bråttom med att få igång display så är det bara att kavla upp ärmarna och köra på. :)
Jag laddade ner Ledcontroller.h och jag fick ändra lite i .cpp och .h filen för att det ska fungera.

Jag tror inte heller att jag skulle lyckas bättre. Jag brukar inte skapa bibliotek, utan jag kör bara med det som finns tillgängligt av enkelhetens skull.

Jag hatar LCD displayer. Dom har svikit mig :(
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Hej!

Nu har jag lyckats få en 7-segment display att skriva 0 till 9 med 2 sekunders mellanrum.
Det är en exempelkod som jag har använt mig av och ändrat lite. Men en sak förstår jag inte.
Vad gör bitRead() för något?

Jag vet att den ger ut värdet 1 eller 0. Men jag kan inte förstå anledningen varför.

Så om jag skriver bitRead(B11111011, 0) så blir det? En etta?

http://arduino.cc/en/Reference/bitRead

Kod: Markera allt

/*
* SevenSegment sketch
* Shows numerals ranging from 0 through 9 on a single-digit display
* This example counts seconds from 0 to 9
*/

// bits representing segments A through G (and decimal point) for numerals 0-9
const byte numeral[10] = {
	//ABCDEFG /dp
	B11111011, // 0
	B01100000, // 1
	B11011100, // 2
	B11110100, // 3
	B01100110, // 4
	B10110110, // 5
	B10111110, // 6
	B11100000, // 7
	B11111110, // 8
	B11100110, // 9
};
// pins for decimal point and each segment
// dp,G,F,E,D,C,B,A
const int segmentPins[8] = { 5, 9, 8, 7, 6, 4, 3, 2 };
void setup()
{
	for (int i = 0; i < 8; i++)
	{
		pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
	}
}
void loop()
{
	for (int i = 0; i <= 10; i++)
	{
		showDigit(i);
		delay(1000);
	}
	// the last value if i is 10 and this will turn the display off
	delay(2000); // pause two seconds with the display off
}
// Displays a number from 0 through 9 on a 7-segment display
// any value not within the range of 0-9 turns the display off
void showDigit(int number)
{
	boolean isBitSet;
	for (int segment = 1; segment < 8; segment++)
	{
		if (number < 0 || number > 9){
			isBitSet = 0; // turn off all segments
		}
		else{
			// isBitSet will be true if given bit is 1
			isBitSet = bitRead(numeral[number], segment);
		}
		//isBitSet = !isBitSet; // remove this line if common cathode display
		digitalWrite(segmentPins[segment], isBitSet);
	}
}
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Nisse »

Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Jag har redan läst den. Funktionen returnerar värdet 1 eller 0 beroende på argumenten x och n.
Men jag kan inte förstå vad detta ska vara bra till.

Om jag har x = 10 och n = 1. Men varför ska det vara så? Vad vill jag få ut?

Jag vet om att 11111011 blir värdet 251. Men det säger inget om det är sant eller falskt.
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Nisse »

Vad du vill få ut kan inte vi andra veta. :?

Funktionen läser en bit i ett tal.

Är talet=0x0101010 och n=1 tittar funktionen på position 1 i talet. Position 1 i talet är 1 alltså returneras 1.

bitRead(0x0101, 0) = 1
bitRead(0x0101, 1) = 0
bitRead(0x0101, 2) = 1
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Men det där känner jag igen från en sanningstabell.
Nu börjar jag förstå koden.

Om den ska skriva ut t.ex. en 3:a så går den igenom varje lampa i displayen och kollar om det är sant om just denna lampa ska lysa eller inte.

Och angående sanningstabellen så trodde jag att den tog hela värdet och spottade ut ett tal.

Kod: Markera allt

isBitSet = bitRead(B11111011, 0);
// 1

Vilket ger en 1:a för första 1:an är just en 1:a

och sen när det kommer till 5:a så blir det en 0:a

Kod: Markera allt

isBitSet = bitRead(B11111011, 5);
// 0

Hmm, rätt smart metod ändå. :tumupp:
Nu förstår jag varför sanningstabellerna helt plötsligt kan vara sant eller falskt beroende på vilken rad man är! Denna metod ska jag lägga på minnet!
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Nisse »

bitRead(B11111011, 5) = 1

n: which bit to read, starting at 0 for the least-significant (rightmost) bit
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur kan radvis 7-segments visa olika om dem är parallell

Inlägg av Al_Bundy »

Jaha! Det är från höger till vänster som man börjar räkna ifrån! Men då vet jag!
För att försäkra dig att jag vet så säger jag att

bitRead(B11111011, 2) = 0
och
bitRead(B10111011, 6) = 0
samt
bitRead(B10111011, 0 = 1
Skriv svar