Knightrider (nybörjar varning)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Knightrider (nybörjar varning)

Inlägg av Pinkevin »

Jag har tänkt börja med programmering av microprocessorer, och eftersom att jag har runt 30 st div. PIC kretsar hemma så var valet av vilken sorts microprocessorer jag skulle börja med enkelt.

Jag har ännu inte skaffat delar till någon programmerare än då jag inte vet vilken jag ska välja.
JDM verkar ju bra eftersom att den klarar av så många kretsar, men nu har jag börjat läsa här att nästan ingen har fått den att fungera, så jag har börjat fundera på att det kanske är bättre att välja en annan.
Då hittade jag NOPPP (No-Parts PIC Programmer, http://www.covingtoninnovations.com/noppp/) och sedan en modifierad version av den (http://www.geocities.com/jpadfield13/noppp3.html), och senare även en enhanced version av den (http://blondini.orcon.net.nz/noppp.html).
Problemet med den förbättrade versionen är att programvaran till den endast finns till Linux och jag är inte så haj på C programmering att jag skulle kunna porta den till Windows.
Annars tycker jag att den modifierade versionen av NOPPP verkar rätt schysst, men är det någon här som har andra erfarenheter av den?

Sedan kommer vi till programmeringen.
Jag hittade denna sidan (http://www.voti.nl/blink/index.html), och denna sidan om hur man får en led att blinka (http://www.voti.nl/blink/index_1.html).
Jag tittade på koden och den såg ju rätt enkel ut, därför bestämde jag mig för att försöka göra en knightrider (kitt scanner) av koden, och den blev såhär:

Kod: Markera allt

include 16f84_20
include jlib            

var bit LED0 is pin_a0
var bit LED1 is pin_a1
var bit LED2 is pin_a2
var bit LED3 is pin_a3
var bit LED4 is pin_a4
var bit LED5 is pin_a5
var bit LED6 is pin_a6
var bit LED7 is pin_a7
pin_a0_direction = output
pin_a1_direction = output
pin_a2_direction = output
pin_a3_direction = output
pin_a4_direction = output
pin_a5_direction = output
pin_a6_direction = output
pin_a7_direction = output

forever loop
  delay_10ms( 25 )
  LED0 = high
  delay_10ms( 25 )
  LED0 = low
  LED1 = high
  delay_10ms( 25 )
  LED1 = low
  LED2 = high
  delay_10ms( 25 )
  LED2 = low
  LED3 = high
  delay_10ms( 25 )
  LED3 = low
  LED4 = high
  delay_10ms( 25 )
  LED4 = low
  LED5 = high
  delay_10ms( 25 )
  LED5 = low
  LED6 = high
  delay_10ms( 25 )
  LED6 = low
  LED7 = high
  delay_10ms( 25 )
  LED7 = low
  LED6 = high
  delay_10ms( 25 )
  LED6 = low
  LED5 = high
  delay_10ms( 25 )
  LED5 = low
  LED4 = high
  delay_10ms( 25 )
  LED4 = low
  LED3 = high
  delay_10ms( 25 )
  LED3 = low
  LED2 = high
  delay_10ms( 25 )
  LED2 = low
  LED1 = high
  delay_10ms( 25 )
  LED1 = low
end loop
Original koden som jag tog "idén" ifrån (http://www.voti.nl/blink/code/b84a-1.jal)
Min fråga är nu vad som skulle hända om man programmerade en PIC16F84A med den här koden?
Och hur skulle man modifiera den för att att den skulle fungera?
Märk väl att detta är mitt första försök till att ens tyda PIC basic (jag tror att det är PIC basic iaf) , så börja inte gnälla på mig för att koden är hel åt skogen fel ;)

OFT:
Mitt första inlägg här -stolt- :D
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Ser väl bra ut...

Om du ska ha en programmerare till 16F84 så kan jag rekommendera PICSY. Den är lätt...

Vad är det för språk du skriver i? C?

Om du vill göra något extra häftigt så kan du ju fejda på LEDsen när de flyttar sig, det blir en mycket mysigare effekt då!
Och då menar jag via programmering, inte elektriskt :D
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Det ser ut att vara skrivet i JAL (Just Another Language). Jal homepage
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Inlägg av Pinkevin »

$tiff skrev:Ser väl bra ut...

Om du ska ha en programmerare till 16F84 så kan jag rekommendera PICSY. Den är lätt...

Vad är det för språk du skriver i? C?

Om du vill göra något extra häftigt så kan du ju fejda på LEDsen när de flyttar sig, det blir en mycket mysigare effekt då!
Och då menar jag via programmering, inte elektriskt :D
Så du menar att den koden skulle kunna fungera?
Alltså, det där med benen den ska göra höga, är den biten av koden rätt?
För vad jag vet så har 16F84 8 st I/O ben, men heter de så i JAL?

Mjo, jag ska programmera 16F84, till att börja med.
Men jag kommer troligen fortsätta med de större PIC kretsarna, då de mindre antagligen inte kommer räcka till, till de saker jag har tänkt (försöka) bygga.
Därför vill jag helst ha en programmerare som fungerar till så många kretsar som möjligt från början, istället för att behöva bygga en massa programmerare som bara tar en massa plats, när det räcker med att bara ha en.

Som mrmike sa så hette det visst JAL.
Men jag skulle gärna vilja lära mig C till PIC också, då detta är mycket kraftfullare.
Finns det några bra sidor om C programmering för PIC kretsar?

Jo, det hade vart helfräckt, inte lika ryckigt.
Men hur sjutton skulle man göra då?
Man skulle ju kunna göra så att när LED x har fått 75% av så mycket spänning den ska ha så börjar LED x+1 att tändas och så fortsätter det.
Men har PIC kretsar möjlighet att kunna bestämma hur mycket spänning den ska spotta ut på varje ben?
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

> Men hur sjutton skulle man göra då?
Man kan blinka dioderna så snabbt att ögat (eller hjärnan?) inte uppfattar blinkningarna. Ju kortare tid dioderna "får ström" desto svagare lyser de.

>För vad jag vet så har 16F84 8 st I/O ben
16F84 har 12 io-pinnar. 5 på PORTA och 8 på PORTB.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Mjo, nästan rätt beskrivet.

En lysdiod som är tänd 1uS och släckt en 1uS lyser för ögat lika starkt som om den är tänd 250uS och släckt 250uS.

Det är inte hur korta "tänd-pulserna" är som avgör ljusstyrkan, utan det är förhållandet mellan släckt tid och tänd tid som gör det.

Ha den tänd i 100uS och släckt i 900uS så lyser den med 10% av full styrka.
Ha den tänd i 250uS och släckt i 750uS så lyser den med 25% av full styrka.
Ha den tänd i 1000uS och släckt i 0uS så lyser den med 100% av full styrka.

[Fast ovanstående visste du ju redan mrmike, men någon annan kan tolka ditt inlägg fel om denne inte känner till hur det fungerar. :-) ]
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

matseng>> Det var så jag tänkte iaf :)
För att kompensera denna miss kan jag bidra med en länk: Microchip PIC C. Lite exempelkod till olika C-kompilatorer. Egentligen är det väl vanlig C så om du, Pinkevin, redan kan koda C någorlunda så kommer du nog snabbt igång.
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Inlägg av Pinkevin »

16F84 har 12 io-pinnar. 5 på PORTA och 8 på PORTB.
5 + 8 = 13, har den 13 I/O pinnar eller 4 st på PORTA?
Mjo, nästan rätt beskrivet.

En lysdiod som är tänd 1uS och släckt en 1uS lyser för ögat lika starkt som om den är tänd 250uS och släckt 250uS.

Det är inte hur korta "tänd-pulserna" är som avgör ljusstyrkan, utan det är förhållandet mellan släckt tid och tänd tid som gör det.

Ha den tänd i 100uS och släckt i 900uS så lyser den med 10% av full styrka.
Ha den tänd i 250uS och släckt i 750uS så lyser den med 25% av full styrka.
Ha den tänd i 1000uS och släckt i 0uS så lyser den med 100% av full styrka.

[Fast ovanstående visste du ju redan mrmike, men någon annan kan tolka ditt inlägg fel om denne inte känner till hur det fungerar. :-) ]
Hur många µS går det på en sekund, 1 miljon (µ = mikro = miljondel?)
Hur får man en PIC att göra ett ben högt i 100 µS och sedan släckt i 900 µS?
Finns det någon sida som förklarar hur man arbetar med frekvenser med en PIC krets?
För att kompensera denna miss kan jag bidra med en länk: Microchip PIC C . Lite exempelkod till olika C-kompilatorer. Egentligen är det väl vanlig C så om du, Pinkevin, redan kan koda C någorlunda så kommer du nog snabbt igång.
Tyvärr så är jag inget vidare på C.
Jag försökte lära mig C när jag var en 10-11 år, men jag tyckte det var lite "ologiskt", så jag gick över till VB istället, vilket jag delvis ångrar idag, då jag tror att jag skulle ha större använding för C..men samtidigt så hade jag kanske inte lärt mig något programmeringsspråk alls ifall jag fortsatt med C.
Men jag får väl försöka lära mig det igen då :)
Förrästen, är asm till PIC svårare än asm till win32? (kanske svårt att svara på)
Alltså, är det stora skillnader mellan asm till win32 och asm till pic?
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

5 + 8 = 13 :oops:

>>Hur många µS går det på en sekund, 1 miljon (µ = mikro = miljondel?)
ja, mikro=10^-6

>>Hur får man en PIC att göra ett ben högt i 100 µS och sedan släckt i 900 µS?
Undrar om jag ska våga mig på att förklara hur man gör :). Kolla här och se om du hittar nå PIC Microcontroller Time Methods.

>>Alltså, är det stora skillnader mellan asm till win32 och asm till pic?
Nja, win32-asm vet jag inte vad det är, du menar nog typ x86-asm(486,P4 o fram- o bakåtkompatibla) eller? Jag vet inte vad som är lättast att använda. x86 kan ju nu för tiden vara 64-bitars medan PIC:arnas processorer är 8:bitars, vilket t.ex. gör att det blir jobbigare och tar längre tid att räkna med "stora" tal på en PIC. En fördel (men också nackdel) med PIC:arna kan vara att de inte har lika många instruktioner vilket kan göra att det är lättare att få ett grepp om om man inte har pysslat med asm. En annan fördel med PIC är nog att PICarna är som de är, du vet att det finns si och så många portar och andra grejer i PIC:en och de är alla dokumenterade i databladet medan det med en IBM-kompatibel dator kan vara svårare att hitta dokumentation. Jag "lärde" mig x86-asm först och tyckte att det gick rätt så smidigt att börja med PIC-asm. Jag bör väl tillägga att jag inte har donat så mkt med x86-asm. Hoppas jag inte förvirrade ännu mer nu.
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Inlägg av Pinkevin »

Ja, det var x86 assambler jag menade.
Jo, PIC kretsarna är ju begränsade till hur de är byggda och så, så man det blir mycket enklare att veta vilka ramar man arbetar inom.
Okej, det låter ju bra..för jag har också "lärt" mig lite x86-asm, så vi får hoppas att det går lite bättre än C eftersom att jag inte är helt grön på asm.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

En sak som är lite tråkig är att man istället för AX-, BX-, CX- och DX-registren i x86 bara har ett register, W, i PIC.
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Inlägg av Pinkevin »

Jo, det har jag märkt.
Men vad betyder l-et och f-et i movlw och movwf?
mov vet jag var det betyder, men var betyder movlw o movwf?
W-et i det är väl W registret, men l-et och f-et?
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Ta hem databladet för PIC16F84/A så ser du asm instruktionerna där... samt då vad dem betyder...

www.microchip.com

//Rille
Pinkevin
Inlägg: 285
Blev medlem: 1 januari 2004, 12:44:10
Ort: Norrtälje

Inlägg av Pinkevin »

För MOVWF står det att man flyttar datan från register W till f.
Men mrmike sa att det endast finns ett register, W.
Hur går detta ihop?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

>> Pinkevin

Om du kan VB så borde du kanske ta en titt på PICBasic? Jag kör med det och tycker att det är löjligt lätt :D

Fast C (eller Asm) är ändå att rekommendera om du siktar högre. PICBasic har sina gränser...


För att få en LED att "fejda" pulsar man den som redan beskrivit. Den lägsta frekvensen du bör modulera på är 25Hz. Vid ännu lägre kan man uppfatta flimmer hos lysdioderna. 25Hz motsvarar en period på 40ms, eller 40 000µs om du hellre vill det...
På denna tiden ska du lätt hinna med att hantera tre LEDs samtidigt.

Fast det är nog bäst att du börjar med en vanlig knightrider... :wink:
Skriv svar