Sida 17 av 26

Postat: 20 februari 2008, 15:51:26
av Icecap
Typisk att det är en "skitsak" som gör det, bra att det fungerar nu!

Postat: 20 februari 2008, 16:37:21
av Stewal
Nja, funkar gör det inte för jag vet hur man får 7bit, Parity even att bli 8bit, Parity No. Eller på något annat sätt konverterar så att det fungerar.

EDIT: Sökte lite snabbt på nätet och tog reda på hur Even och Odd parity fungerar.
Går det på något sätt att sätta 7 biten till 0 eller ignorera den.

Postat: 20 februari 2008, 20:18:31
av Icecap
movf RCREG,W ; Read UART rx register
andlw h'7F' ; strip MSB

Postat: 20 februari 2008, 21:57:14
av Stewal
Tackar!
Nu fungerar allt som det skall!

Måste tacka alla er två Sodjan och Icecap, som hjälpt mig i detta del projekt.
Det tog en månad och nu har jag lärt mig en del om ASM programmering.
Misstänker att det finns mer att lära.
Nästa del blir att få åkarens start nr. och tid, samt bästa tid och dennes start nr. på en LCD display.

Postat: 20 februari 2008, 22:50:29
av Icecap
Ska jag vara allvarlig tror jag att du har lärt mer >programmeringsteknik< än >assembler< .... vilket är bra! Lär man tekniken bra nog har det till slut "ingen betydelse" vilket språk man skriver koden i, man vet likaväl hur man ska lösa problemet.

Postat: 4 mars 2008, 13:15:49
av Stewal
Idag fortsatte jag med nästa del i detta projekt och det är att få upp tiderna på en HD44780 kompatibel LCD display.
Jag testade displayen med JESCAB´s kod exemplel http://www.jescab.se/HD44780.html och den fungerar.
Så jag har börjat lägga till kod för att få data från tidtagningen att komma upp på lcd displayen,
men det verkar inte gå att skriva på följande sätt för där det står digit_0, digit_1 o.s.v. blir det bara konstiga tecken.
Får inga felmedelande i MPLAB, kan man som nedan?

Kod: Markera allt

lcd_text1   data    d'1', d'1', ' ', ' ', ' ', ' ', h'00'
lcd_text2   data    d'1', d'5',  digit_7,  digit_6, ':', digit_5, digit_4, ':', digit_3, digit_2, ',', digit_1, digit_0, h'00'
lcd_text3   data    d'2', d'1', ' ', ' ', ' ', ' ', h'00'
lcd_text4   data    d'2', d'5', ' ', ' ', ':',' ', ' ', ':', ' ', ' ', ',', ' ', ' ', h'00'

Postat: 4 mars 2008, 13:27:24
av sodjan
Du har inte förstått vad som hanteras/beräknas vid "assembly time" resp "run time".
Ett vanligt missförstånd...

Du får inga felmedelanden eftersom det du har skrivit är helt korrekt.
Men det ger inte det resultat som du tror.

Kolla upp "data" (sid 62 i MPASM manualen). Som du ser så skapar
det data till minnesadresser vid *assembly time*. I ditt exempel så
kommer data att lägga in *adresserna* till digit_x som data till LCD'n.
Det ger nog inte förväntat resultat... :-)

Eftersom "data" skapar fasta konstanter i flashminnet, så kan du inte
heller ändra värdet vid run_time.

Du kan använda lcd_text4 för att rensa displayen, men det andra får du
skriva ut på annat sätt. Inget problem alls, bara att skapa en
subrutin som du anropar på lämpliga ställen...

Postat: 4 mars 2008, 14:12:21
av Stewal
Är det den här manualen du menar?
http://ww1.microchip.com/downloads/en/D ... 33014J.pdf

Postat: 4 mars 2008, 15:03:46
av sodjan
Ja.
Men samma info finns (om man vet har man hittar den) on-line
i MPLAB också.

Postat: 15 mars 2008, 12:10:19
av Stewal
Så åter till detta projekt.

Ja nu förstår jag varför det vart konstiga tecken.

Det man alltså skulle kunna ha nytta av "data" är om man vill t.ex. skriva ut text vid uppstart så som ex. version m.m.
Där efter ha en subrutin som rensar lcd´n och skickar inkomna tecken från resektive Digit_x till rätt pos på lcd´n

Postat: 15 mars 2008, 12:54:57
av sodjan
Det som man definierad med "data" är statiskt och kan inte ändras i run-time.

Sen kan man naturligtsvis kombinera data-strängar med variabler som t.ex
om man vill skriva "Temp:xxx" då "Temp:" kan vara en statisk "data" sträng
och "xxx" skrivs ut dynamiskt.

För att få en snygg struktur på det hela så jobbar man så klart friskt
med subrutiner.

Postat: 15 mars 2008, 13:02:17
av Stewal
Tittade in manualen för Hitachi HD44780U (LCD-II) och såg att man kan välja mellan att köra 8 eller 4 bit överföring. I ditt ex. är det 4 bit. är det någon anledning till att du valde 4-bit eller bara för att vissa ett ex. med 4 bit.

Anledningen till at jag undrar är att det blir ju mindre kod med 8-bit och förmodligen snabbare överföring till lcd´n.

Postat: 15 mars 2008, 13:12:55
av sodjan
Man sparar 4 pinnar. Hastigheten är i 99 fall av 100 helt ointressant.
Och spara kod ? Det blir kanske 10-20 extra instruktioner för
att dela upp 8-bitar i två 4 bitars "bitar". Vad gör det ?

Postat: 15 mars 2008, 13:29:30
av Stewal
Okej!

Då en fråga angånde koden, för att skicka ett tecken till lcd´n måste man veta vilken rad och position innan man skickar tecknet.

Så om jag förståt allt rätt så skickar man först vilken rad "rad 1" och sedan vilken pos "pos 1" och sedan tecknet.
Skall man sedan börja om med rad och pos innan man skickar nästa tecken eller kan man skicka nästa direkt efter åt?

Postat: 15 mars 2008, 14:56:50
av sodjan
HD44780 har en "markör" ("cursor") som stegas fram automatiskt.
Varje tecken skrivs efter föregående tecken, om man inte
ställer om adressen...