Sida 3 av 3
Postat: 4 januari 2007, 10:46:52
av Icecap
Först hoppas jag att du får ordning på projektet i ASM.
Därnäst kan jag faktisk inte låta bli: VAD VAR DET JAG SA??!!!?!?! BASIC suger!!!!!!!!!
Sådär, nu är det ute ur systemet.
Det svåraste i programmering är att få överskådlighet, olika språk har olika uppbyggnad som hjälper/stjälper med denna överskådlighet och BASIC är inte ett speciellt bra språk för överskådlighet.
Men den största faktor är programmören, inte språket! Att bryta ner ett program i moduler kan vara totalt likgiltigt om dessa moduler är dåligt valda. Ett exempel är att du kallar en lcd_delay och det är i DEN som Strobe aktiveras!
Som jag ser det ska den rutin som skriver ut en byte göra HELA utskrivningen, en delay ska vara just enbart delay osv. vara sig du kör assembler/BASIC/C eller annat.
Postat: 4 januari 2007, 23:26:34
av JimmyAndersson
"Därnäst kan jag faktisk inte låta bli: VAD VAR DET JAG SA??!!!?!?! BASIC suger!!!!!!!!! "
Jo, man kanske inte bör göra såhär stora program i Basic. Det blir bara komplicerat. Däremot tror jag (åminstone än så länge) att Basic är praktiskt för mindre grejjer. Tester, LED/fläkt-styrning mm, som jag skrev i en annan tråd. Det kanske kommer visa sig att jag har fel, men då blir man en erfarenhet rikare.
Håller med om att det inte är så logiskt att ändra E i en procedur som heter lcd_delay. Namnet kanske kan diskuteras, men att E-skakningen finns med i samma rutin som delayet tycker jag är en bra idé. Utan E så skulle proceduren vara onödig. Jag kunde då lika gärna ha lagt delayen direkt i den övriga lcd-koden och då hade det blivit såhär:
LATA = %00000011
delay_us(500)
E = 1
delay_us(500)
E = 0
LATA = %00000011
delay_us(500)
E = 1
osv...
Jämför man med hur jag kört nu så blir det lite bättre:
LATA = %00000011
lcd_vanta
LATA = %00000011
lcd_vanta
osv...
Sedan om proceduren heter lcd_vanta, lcd_wait eller lcd_wait_and_shake_e gör inte proceduren till ett dåligt val. Så länge man håller sig till en standard (egen eller befintlig) och har koll på vad som är vad så är man på rätt väg.
Att jag försöker använda med "svenska" namn på procedurer och variabler beror på två orsaker:
1) Ännu lättare att hålla isär vad som är "mina grejjer" och vad som är "programmeringspråkets".
2) I princip obefintlig chans att man använder ord som är reserverade för programmeringspråket.
Då och då får man plocka bort å ä ö, men vem är inte van vid det med tanke på URL'er och mailadresser...

Postat: 4 januari 2007, 23:49:23
av JimmyAndersson
Funderade lite på det sodjan skrev:
"Jag är inte riktigt säker här, men notera att en HD44780 kontroller
tar lite olika tid på sig för att göra olika saker. Jag vet dock inte om
"flytta cursor" hör till de som tar "extra" tid."
Sant. "Flytta cursor" tar 39µs. Min delay är på 500µs, så jag har god marginal.
Men när jag plockar bort problemraden så flyttas markören flera gånger. Kan även hålla inne knapparna och få massa interrupt. Ändå fungerar allt och LCDn hinner flytta markören. Så då vågar jag nog påstå att själva LCD-skrivningsdelarna inte har något med problemet att göra.
"> Vad kan det beror på att jag får (iallafall rent visuellt) random-tecken
> på displayen när jag ändrar smågrejjer i koden?
Timing problem i koden eller R-M-W fenomen (du fipplar ju med CE, RS
o.s.v med bit-operationer, antar jag). "
När jag fipplar med dem så använder jag LAT, så då borde jag inte få R-M-W-problem. Timing-problem... mja, möjligen, men nog borde 39st "skriv ut bokstav" följt av "flytta markör" ha större potential att ge timingproblem än ett anrop till en procedur som enbart skriver ut ett "A" ?
Den proceduren ska dessutom bara köras när jag fått ett interrupt på ADC'n och den har gett ett värde som ligger mellan 169-179. Men proceduren verkar köras utan att man gör något annat än att ge PIC'en spänning, för om jag plockar bort raden som kör proceduren så fungerar allt felfritt.
Postat: 4 januari 2007, 23:52:08
av sodjan
> så jag har god marginal....
OK.
> så använder jag LAT...
OK.
Då så...

Postat: 5 januari 2007, 00:00:04
av JimmyAndersson
Så då borde det ju fungera. Ska berätta det för PIC-kretsen.

Postat: 5 januari 2007, 00:04:04
av sodjan
Jag menade bara att jag inte vet vad du har gjort för fel...

Postat: 5 januari 2007, 00:29:03
av JimmyAndersson
Förstod det.
Så då är det bara att börja om från början, fast med asm.
Tror att jag hoppar över "Blinka LED" och avancerar upp till "Initiera LCD" direkt.
Postat: 5 januari 2007, 03:43:13
av Jim_the_one
är bara tvungen..
man har väl inte roligare vid den här tiden på dygnet när ungen redan är tillverkad och utklämd

Postat: 5 januari 2007, 08:29:32
av Icecap
Jimmy: "Jo, man kanske inte bör göra såhär stora program i Basic. Det blir bara komplicerat. Däremot tror jag (åtminstone än så länge) att Basic är praktiskt för mindre grejer."
Att ett högre nivå språk än ASM kan vara snabbare när man väl har fattat hur processorn fungerar kan definitivt vara sant, har man inte timingskänsliga funktioner men att BASIC är bättre till detta än C.... tillåt mig ett rått skratt.
Men om du någon gång kommer in i C-världen lär du upptäcka skillnaden.
Men vilket språk man än väljer kommer det knappast att bli bättre än programmören: väljer man flyttal där heltal hade varit lika bra osv kommer det såklart att påverka funktion och hastighet.