PIC och OLED

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag tror mer på sodjans programvarufel, närmre bestämt RMW-problemet.

Om Enable styrs med en BSF/BCF-instruktion bor det införas en NOP omedelbart innan BxF-instruktionen för att utgången ska hinna med att ladda upp/ur de kapaciteter som finns.

(RMW = Read-Modify-Write)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Koden är ok...
> Men den är inte satt som ingång.......
>> jag är 99% säker på att det är ett mjukvarufel.
> Nej. tror inte det...

OK, då vet vi vad du *tror*...
Spelar det ingen roll vad alla andra tror ?
Spelar det ingen roll att det fungerade med "Hello World" programmet ?

Varför fråga här alls om du ändå skiter helt i svaren ?

Jösses...
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Inlägg av ElectricMan »

Det enklaste borde väl ändå vara att lägga upp koden så nån får kolla på den? :)
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Om kabellängden eller trådarnas placering påverkar så beror det på dålig mjukvara (timingproblem).

Det är alltid kul att konfrontera optimistiska hackers som inte har koll på timingen med verkligheten, det brukar leda till att de får skriva om hela mjukvaran. :)
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

Precis som sodjan tror, så lutar det ju åt programfel. Detta eftersom ditt helloworld program fungerar med samma hårdvarusetup som temperaturprogramet. Kolla timingen!
Fredrick
Inlägg: 342
Blev medlem: 9 januari 2004, 23:12:33

Inlägg av Fredrick »

Anledningen till varför jag inte lägger ut koden är att då får jag kommentarer som haha PICbasic ger jag inte mycket för och sedan kommer det 10 inlägg på raken om vilket språk jag igentligen skall välja ASM C mfl, bla bla bla och sen är man för alltid en nybörjare som igentligen inte är välkommen här mera då man anses ha allt för dåliga kunskaper inom elektronik för att få vara med de stora grabbarna. Ja så känns det faktiskt

Kod: Markera allt

temperature Var	Word			' Temperature storage
count_remain Var Byte			' Count remaining
count_per_c Var	Byte			' Count per degree C

DQ	Var	PORTC.0			' One-wire data pin


	ADCON1 = 7			' Set PORTA and PORTE to digital
	Low PORTE.2			' LCD R/W line low (W)


mainloop: OWOut DQ, 1, [$CC, $44]       ' Start temperature conversion

waitloop: OWIn DQ, 4, [count_remain]	' Check for still busy converting
	If count_remain = 0 Then waitloop

	OWOut DQ, 1, [$CC, $BE]		' Read the temperature
        OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]

	' Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
	temperature = (((temperature >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
	Lcdout $fe, 1, DEC (temperature / 100), ".", DEC2 temperature, " C"

	' Calculate temperature in degrees F to 2 decimal places (not valid for negative temperature)
	temperature = (temperature */ 461) + 3200
	Lcdout $fe, $c0, DEC (temperature / 100), ".", DEC2 temperature, " F"

        Pause 1000                      ' Display about once a second

	Goto mainloop			' Do it forever
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.

> Anledningen till varför jag inte lägger ut koden...

Finns ingen rimlig anledning att inte göra det om det inte handlar om
företagshemligheter eller liknande. Hade du gjort det direkt så
hade halva tråden sparats in.

Var "Hello World" programmet skrivet med samma verktyg ? Kan
du i så fall posta det också ?

Nyckelfrågan här är exakt *vad* Lcdout gör ! Hur beskriver dokumentationen
det ? Finns det källkod (ASM) till Lcdout så att du kan kolla vad den faktiskt gör ?

(Och, ja visst, detta är ett problem med den typ av verktyg som det du
använder, men vad är problemet med att påpeka det ??)
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Du är hela tiden så säker på din sak och hävdar att det inte är något fel på din kod trots att ett flertal personer säger att det måste vara det.
Då kan det ju finnas en viss risk att det kommer en del oönskade kommentarer sedan.

Jag är ingen hacker så jag ska i alla fall inte kommentera.
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Inlägg av petterMAN »

Det går att definiera samtliga delayer i LCDout funktionen
Här är standard delay inställningar:

Kod: Markera allt

‘ Set command delay time in us
DEFINE LCD_COMMANDUS 2000
‘ Set data delay time in us
DEFINE LCD_DATAUS 50
Sedan så kan det ju vara bra att definiera kristallens hastighet så att du vet att 1000us verkligen blir 1000us i praktiken också.

Kod: Markera allt

DEFINE OSC 4 ‘ Oscillator speed in MHz: 3(3.58) 4 8 10 12 16 20 24 25 32 33 40
Lycka till!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Är det delay mellan olika kommandon (min gissning) eller (vilken *kan*
vara problemet i detta fall) delayer för själva E-pulsen ?
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Inlägg av petterMAN »

Eftersom att dokumentationen är lite bristfällig i vissa tillfällen så måste jag helt enkelt svara att jag inte vet. Den enda information men får är just kommentaren ovanför kommandot.

Hittade en annan formulering, dock kanske inte så givande.

Kod: Markera allt

DEFINE LCD_COMMANDUS 2000		'Define delay time between sending LCD commands
DEFINE LCD_DATAUS 50			'Define delay time between data sent.
Men det är väl inte svårare än att testa öka delayen för att se om det hjälper.
Ställ även in oscillatorns hastighet genom att definiera den i början av programmet. Standard är 4mhz.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, dessa delayer verker inte röra själva gränssnittet, utan för att
modulen ska hinna utföra varje kommando innan nästa kommer.

En nyckel-info just nu är hurvida "Hello World" programmet var skrivet
med samma verktyg ?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Ett hårdvaruproblem är väl intehel uteslutet. Ibland har jag haft stora problem att flasha PIC's, det har bara blivit blaj tills det har kopplats in motstånd och kondigar som slöar ner flankerna lite på klockan så att att datalinan inte störs.

Pröva att sätta ett par hundra ohm i serie med enable där den kommer ut från processorn. Sedan är det bara att hoppas programmet har en tillräcklig fördröjning. Nnnnnnågra hundra pF mellan enable och jord vid displayen kan ev. också göra nytta.

Pröva också att ha enable omgiven av jordade trådar i flatkabeln, där dessa jordningar bara är anslutna vid processorn.
Fredrick
Inlägg: 342
Blev medlem: 9 januari 2004, 23:12:33

Inlägg av Fredrick »

Här är "Hello world" programmet, jag har provat med en massa pauser i temp programmet men det hjälper inte.

Har laborerat med olika DEFINES också

Jag har ställt samma fråga på ett support forum för PicBasic och fått massor med rader att lägga till men inget hjälper och nu säger dom att problemet inte ligger i koden.

Jag kan ju tillägga det att jag har fått det att fungera för en massa år sedan med samma kod men då satt displayen uppkopplad till ett annat kort och uC´n var en gammal hederlig 16F84.

Kod: Markera allt

ADCON1 = 7

        Pause 1000       

loop: Lcdout $fe, 1  
        Lcdout "Hello"
        Pause 500      

        Lcdout $fe, 1  
        Lcdout "World"
                     
        pause 500
goto loop
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Visst kan man trixa med hårdvaran, men i det här fallet finns ingen anledning att köra så hög datahastighet eller snäva marginaler så att hårdvaran blir begränsande.

Jag har kört med meterlånga flatkablar kopplade direkt till displayer utan hänsyn till några extra jordningar eller termineringar, det har aldrig varit något problem.
Skriv svar