Resultat display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Jag har inte kunskapen att bedöma om det går eller inte.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Postakoden som sänder ut data till displayerna.

Antingen är schemat Du postat tidigare fel, eller så går det att styra punkterna.

Felet jag misstänkeer Du gör är att först skicka data och sedan den extra klockpulsen för att få ut data till displayerna. Detta upprepar Du antagligen sedan en gång per siffra. Den metoden är *FEL* och leder till just att punkterna inte kan adresseras.

Du skall istället skicka ut data till siffrorna *utan* den extra klockpulsen. Först när Du har gjort detta fyra gånger skall Du skicka *EN* extra klockpuls.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Kod: Markera allt

;
; Siffrorna räknas från	höger
	MOVLW    b'11110010'   ;Siffra 3
	CALL     send_to_display
	MOVLW    b'11100000'   ;Siffra 7
	CALL     send_to_display
	MOVLW    b'11100000'   ;Siffra 7
	CALL     send_to_display
	MOVLW    b'11111100'   ;Siffra 0
	CALL     send_to_display
	MOVLW    b'01100000'   ;Siffra 1
	CALL     send_to_display
	MOVLW    b'00000000'   ;Siffra "släckt"
	CALL     send_to_display
	BSF      CLKIN         ; Pulsa LCKIN
	BCF      CLKIN         ; Pulsa LCKIN
;
 **************************************************
; Rutin för att sända ett tecken till 7-seg LED display
; Bit-mönstret ska finnas i registret "W" före anrop
;
send_to_display
 	NOP                    
	MOVWF    send    ; Spara värdet från W till send.
;
; bit 0
	RRF      send,f     ; läs från vänster till höger, en bit -> C flaggan
	BTFSS    STATUS, C     ; kolla C-bit, skip om C = "1"
	NOP                    
	NOP
; bit 1
	RRF      send,f     ; läs från vänster till höger, en bit -> C flaggan
	BSF      DATAIN    ; sätt DATAIN = "1"
	BTFSS  STATUS, C	; kolla C-bit, skip om C = "1"
	BCF     DATAIN	; C var alltså "0", cleara DATAIN
	NOP		; Låt DATAIN stabilisera sig...
	BSF     CLKIN	; Pulsa CLKIN
	NOP                    
	BCF     CLKIN	; - " -
	NOP
; bit 2
o.s.v.
; bit 3
o.s.v.
; bit 4
o.s.v.
; bit 5
o.s.v.
; bit 6
o.s.v.
; bit 7
	RRF      send,f     ; läs från vänster till höger, en bit -> C flaggan
	BSF      DATAIN    ; sätt DATAIN = "1"
	BTFSS  STATUS, C	; kolla C-bit, skip om C = "1"
	BCF     DATAIN	; C var alltså "0", cleara DATAIN
	NOP		; Låt DATAIN stabilisera sig...
	BSF     CLKIN	; Pulsa CLKIN
	NOP                    
	BCF     CLKIN	; - " -
	NOP

  RETURN
EDIT:

Som kan ses i koden är det nu 6 st. displayer.

Det som vissas är: _10773
Senast redigerad av Stewal 11 oktober 2008, 21:09:07, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag har inte kunskapen att bedöma om det går eller inte.

Jag menade att *testa* hur/om det fungerar, inte bedöma... :-)
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Ja det verkar ju konstigt om det inte skulle gå, efter som det är kopplat för att det skall gå.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, rent spontant ser det ju OK ut.

En liten sak bara...
De där extra BTFSS + 2 st NOPs i bbörjan av subrutinen är onödiga,
du kan lika gärna köra två RRF direkt efter varandra.

Om jag ser rätt så blir det alltså *7* st CLK pulser per display !?
I så fall så är det ju så att den åttonde biten ("punkterna") inte
kan användas vid seriekoppling av displayerna...

Och du får alltså ut just det som du vill, eller hur ?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Koden är trasig.

Du måste skriva om send_to_display.


1 spara byte som skall sändas i send
2 spara talet 8 räknare
3 skifta send
4 sätt databiten
5 skippa rad 6 om carry är satt
6 cleara databiten
7 cleara klockbiten
8 nop
9 sätt klockbiten
10 dekrementera räknare och skippa 11 om den blir noll
11 hoppa till 3
12 return

Ändra också så att Du clearar klockbiten, gör en nop och sedan sätter den efter att alla siffrorna är sända. Klockbiten skall alltså vara 1 i viloläget.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Loop eller inte ska inte spela någon (funktionell) roll,
men clockpulsens polaritet är naturligtsvis viktig.
Bara byt BSF CLKIN mot BCF och tvärtom...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Visst är det egalt om den loopar eller har det in-line. Däremot måste det vara 8 bitar som skifta ut per siffra. Det förefaller som att det görs ett skift som inte syns någonstans. Databladet på displayerna visar klart och tydligt att det är 8 bitar som sikall ut till varje.

Sedan förefaller det även som att den hopkopplade klockingångarna är obuffrade. Beroende på hur lika ingångsbuffrarna är det osäkert vad som visas. Antar att klockan är åtminstone aningen trög och det skapar osäkerhet. Kommer latchklockan något tiotal nanosekunder efter shiftklockan så visas senast inskiftade data, annars föregående. Däremellan avgör slumpen hur det blir...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Där är mera tveksamheter i konstruktionen än vad som redan har nämnts. Klockan som går vidare buffras med två "seriekopplade" 7400 och där uppstår fördröjning.

Därför ligger klockan till nästa siffra två grindtider efter data och så gör man bara inte när skiftregister skall kopplas samman. Det kan förklara vad som händer, om jag nu tänker rätt...

Det enda vettiga är nog att ansluta data från varje display till sin egen pinne på PIC för att kunna säkerställa marginalerna.

En fulfix skulle kunna vara att lägga en RC-länk i datalinan mellan varje display i kedjan. Bara en konding kan också räcka och är snabbt testat. Det lastar utgången och skapar därigenom även mera skit på matningsspänningen, men varför inte... Prova 100p, om det inte ger resultat så gå upp en dekad till 1n.

Skall det skiftas på det sättet så behövs det ett extra steg så data på vidarekopplingen skiftarpå motsatt flank som skiftregistret. Det finns/fanns en sådan krets i 4000-serien (minns inte numret nu) med två utgångar. Den fördröjda skulle användas när det var trög klocksignal och risk för problem.

edit: Jag är ganska säker på att det är här problemet finns. Han säger att punkterna och nästa displays första segment blir desamma. Just detta blir följden av att klockan kommer efter data. Det blir som om sista steget i skiftregitret hoppas över. Det förklarar även att 7 pulser fungerar trots att det är ett 8-bit skiftregister.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Marta skrev:Visst är det egalt om den loopar eller har det in-line. Däremot måste det vara 8 bitar som skifta ut per siffra. Det förefaller som att det görs ett skift som inte syns någonstans. Databladet på displayerna visar klart och tydligt att det är 8 bitar som sikall ut till varje.

Sedan förefaller det även som att den hopkopplade klockingångarna är obuffrade. Beroende på hur lika ingångsbuffrarna är det osäkert vad som visas. Antar att klockan är åtminstone aningen trög och det skapar osäkerhet. Kommer latchklockan något tiotal nanosekunder efter shiftklockan så visas senast inskiftade data, annars föregående. Däremellan avgör slumpen hur det blir...
Det med följer ett demokort med varje display, som om man trycker på en knapp stegar en siffra i taget. Den måste vara inställd på 8-bit, för det blir samma fel där att det försjuts en bit för varje display. Efter att alla siffror visats så går den igenom ett segment i taget och där sker något konstigt, på display 1 (binärt räknat 5,4,3,2,1,0) för där tänds segment E1 och F1 (se vilka det är i pdf). Den vissar två segment istället för bara ett.

http://www.sureelectronics.net/pdfs/DE- ... 1.0_EN.pdf
Mer om demoboard se sid. 15 i pdf'n.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Schemat på demoboard säger ingenting, det är en PIC 10F200 där sitter och det är programmet till denna som skulle kunna ha sagt något. Kanske den inte är code protected och går att läsa av, men det är inte det första Du bör göra nu.

Har Du provat att ansluta en liten konding mellan data in och jord på siffrorna?

Om inte, pröva att göra detta innan Du gör något mera. Det räcker att först göra det på den andra displayen i kedjan och se ifall något händer. Bara håll den där medan Du stegar siffrorna och se om där blir någon förändring.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Koden för PIC 10F200 finns i PDF´n, se sid 16.

Jag har inte prövat med någon konding då jag inte har någon där jag befinner mig nu. Kan ju i och för sig se vad det sitter för några på demokortet och löda loss en av de och använda.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Har Du några motstånd på några k? Prova då att sätta ett sådant i serie med datalinan mellan displayerna så gör kanske kretsens egna kapacitanser resten.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Har nu testat med en konding som lödes bort från demoboardet, en 104 och monterat mellan datain och gnd.

Tyvärr samma resultat.
Skriv svar