Jag behöver tidsstyra tre relän, pic?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Andy »

choppertony: Det finns flera att välja mellan bl a PicBasic, PicBasic Pro, Proton+, MikroBasic, Swordfish (dock endast 18-picar) o s v.
Man kan ladda hem gratis kompilatorer med vissa begränsningar (antal rader kod) för de flesta av dessa.
Sedan finns det helt gratis open source t ex: Great Cow BASIC, http://gcbasic.sourceforge.net/
Själv använder jag PicBasic Pro & MicroCode Studio som jag trivs bra med (det finns fler på EF som använder detta).
http://melabs.com/pbpdemo.htm Klarar ett begränsat antal PIC modeller.

En del har förutfattade meningar om vissa saker men det kan man skita i!
Tripp tror jag det var som t ex skrev Basic till en komplett ECU vilket ju talar för att PicBasic visst duger till vad som helst!
Det finns många andra exempel på att det duger men här på EF vågar många inte diskutera det för att man blir tråkigt bemött men det kan man oxå skita i, det gör jag. :D
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av sodjan »

Helt rätt. Att programmera i en modern BASIC skiljer sig inte så
mycket från vilket annat språk som helst. Att BASIC har lite
dåligt rykte beror dels på att BASIC varianter för 20-30 år sedan
hade sina begränsningar, dels på att många som kör just BASIC
är nybörjare för övrigt också och då kommer deras nybörjarmissar
att skyllas på just BASIC.

Men, som alltid, kan man inte *programmera* så spelar det ingen
roll alls vilket språk man försöker med...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av AndersG »

En del har förutfattade meningar om vissa saker men det kan man skita i!
Och en del av oss är tvungna att skriva i BASIC ibland och tycker att det är skräp :) Då är det inte en förutfattad mening. En förutfattad mening kan man inte ha om något man har erfarenhet av, men i slutänden är det ett verktyg. Personligen tycker jag att C och Assembler funkar bärt för mig, men om man får jobbet gjort i BASIC så varför inte?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47008
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av TomasL »

Beror väl också på om det är en kompilerande BASIC eller en interpreterande BASIC, där den senare är helt värdelöst.
Kompilerande BASIC bör väl i princip skapa lika bra/dålig kod som C.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av AndersG »

I princip ja. Ett av argumenten mot högnivåspråk i gemen på MCUs är väl att man inte har full koll på vad som genereras.
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Andy »

Det var kanske inte helt korrekt att använda ”förutfattade meningar” som beteckning på fenomenet i fråga. Jag förstår att i vissa fall kan det vara fördelaktigt att skriva i asm men för hobby och semi-professionell verksamhet är inlärningströskeln alldeles för hög för det stora flertalet.
Jag har själv hankat mig fram i 6502 miljö (”maskinkod”) på VIC20 tiden men när det finns genvägar (läs Basic) så kommer jag aldrig att gå bakåt i tiden igen! Varför åka hästskjuts när det finns jet? Naturligtvis finns det fällor att falla i men det uppväger ändå inte fördelarna och enkelheten i koden för att inte tala om hur mycket mindre man behöver skriva:

Exempel.

PicBasic Pro:

SERIN 0, N2400, ["A"] 'SERIN 0, N2400, ["A"] ' Wait for the ASCII character A on port-pin 0 at 2400 baud
ASM:

; SERIN port, pin, baud, polarity, bytes, filter
; Receives data serially at the specified rate and polarity via the specified
; port pin. Stores the data as a counted string starting at buffer-1 (buffer is
; the number of bytes in the string). An optional filter causes the routine to
; ignore data outside a range of ASCII character values set by filt_lo and
; filt_hi.

buffer = 31 ; String storage.
B2400 = 30 ; Bit delay for 2400 baud.
B1200 = 62 ; Bit delay for 1200 baud.
B600 = 126 ; Bit delay for 600 baud.
B300 = 255 ; Bit delay for 300 baud.
filt_lo = '0' ; Set filter for ASCII
filt_hi = '9' ; chars representing 0-9.

org 8
baud ds 1 ; Baud rate.
pin ds 1 ; Pin number (0-7).
port ds 1 ; Port number (0-2).
bytes ds 1 ; Number of bytes to receive.
temp1 ds 1 ; Temporary counter for Serin.
temp2 ds 1 ; Temporary counter for Serin.
temp3 ds 1 ; Temporary counter for delay.
ser_fl ds 1 ; Flags for serin switches.

polarity = ser_fl.0 ; Polarity: 0=true, 1=inverted.
filter = ser_fl.1 ; Range filter: 0=off, 1=on.
filt_1st = ser_fl.2 ; 1st filter byte passed?: 0=no, 1=yes.
aux = ser_fl.3 ; Temporary flag for filter comparisons.

; Device data and reset vector
device pic16c55,xt_osc,wdt_off,protect_off
reset start
org 0
; Table to convert pin number (0-7) into bit mask (00000001b to 10000000b).
Pinz jmp pc+w
retw 1,2,4,8,16,32,64,128

; Subroutine used by Serin to get a bit and delay for a number of loops
; set by temp3. Jumping into get_bit:loop provides the delay, but ignores the
; input bit.
get_bit mov fsr,port ; Point to port.
mov w,indirect ; IF Polarity = 0 THEN w = Port
snb Polarity ; ELSE w = NOT Port
mov w,/indirect
AND w,pin
snz ; IF w AND pin THEN carry = 1
clc ; ELSE carry = 0.
sz
stc
mov fsr,temp1 ; Point to buffer location.
rr indirect ; Rotate carry into msb of data byte.
:loop jmp $+1 ; Two-cycle nops.
jmp $+1
jmp $+1
jmp $+1
jmp $+1
djnz temp3,:loop
ret

; Main program start. Receives a single byte of data, filtered for numeric
; characters, and displays the data bits on LEDs connected to port RB.
start mov !ra, #15 ; All inputs.
mov !rb,#0 ; All outputs for LEDs.
clr rc ; Clear the LEDs.
clr ser_fl ; Clear serial flags.
mov bytes,#1 ; Receive 1 byte
clrb filter ; not filtered
setb polarity ; inverted polarity
mov baud,#B2400 ; at 2400 baud
mov pin,#2 ; via pin 2
mov port,#0 ; of port ra.
CALL SERIN ; Receive the data.
mov rb,buffer-1 ; Move byte to LEDs on RB.
jmp start ; Endless loop


; Body of the Serin routine. Expects the baud constant in baud, number of
; bytes to receive in bytes, the I/O port (0-2 for RA through RC) in port,
; the pin number (0-7) in pin, and the flag settings in ser_fl
SERIN clr buffer ; Clear buffer counter.
clrb filt_1st
ADD port,#RA ; Add offset for port RA.
mov w,pin
CALL Pinz ; Get bit mask from the table.
mov pin,w ; Put the mask into pin.
mov temp1,#buffer-1 ; Pointer for first data address.
:poll mov fsr,port
mov w,indirect ; IF Polarity = 0 THEN w = Port
snb Polarity ; ELSE w = NOT Port
mov w,/indirect
AND w,pin ; IF pin = 0 THEN receive data
jnz :poll ; ELSE poll
clc
mov w,>>baud ; LET temp3 = baud/2
mov temp3,w ; Set up 1/2 bit time delay.
CALL get_bit:loop ; Jump into delay of get_bit.
mov temp3,baud ; Set up full bit time delay.
CALL get_bit:loop ; Jump into delay of get_bit.
mov temp2,#8 ; Eight data bits.
:rcv mov temp3,baud ; Set up bit delay.
CALL get_bit ; Get the next data bit.
djnz temp2,:rcv ; Eight bits received?
:done mov temp3,baud ; Set up bit delay.
CALL get_bit:loop ; Wait for stop bit.
jnb filter,:skip ; IF filter=0 (off) THEN :skip
clrb aux ; LET aux = 0.
csae indirect,#filt_lo ; IF byte < filt_lo THEN aux=1
setb aux
csbe indirect,#filt_hi ; IF byte > filt_hi THEN aux=1
setb aux
jnb aux,:skip ; If aux = 0 (byte is within
snb filt_1st ; filter range) :skip. If byte is
ret ; out of range, but valid bytes have
jmp :poll ; been received, return. Else poll.
:skip setb filt_1st
DEC temp1 ; Decrement buffer pointer.
inc buffer ; Increment buffer counter.
djnz bytes,:poll ; More bytes to receive: poll.
ret


Jovisst, jag är lat! :D
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av sodjan »

Nedanstående är att BASIC exempel. Ser väl inte helt
annorlunda ut än många andra språk och absolut inte som det
som de flesta tänker sig, "10 PRINT A" o.s.v.

Kod: Markera allt

    while 1                                                           ! loop until we jump out
        rc% = SYS$GetJpiW(,Seed_PID% by ref,, &
                          JpiLst() by ref, &
                          IosbJpi::quad_0 by ref,,)                   ! get process info
        Select rc%
            case SS$_Normal
            case SS$_suspend
                iterate
            case SS$_NoMoreProc
                print "-i- process scan is complete" if logging_flag% >= 2
                goto test_process_flags
            case else
                print "-e- GetJpi: "+ str$(rc%)                       ! print rc	(for debug)
                sleep 1
                call LIB$Stop(rc% by value)                           ! oops, better kill my self
        end select
        !
        !	we found a proc, now do the associated book keeping
        !
        junk$ = left$( PrcNam, PrcNam_RtnLn)
        junk$ = edit$( junk$ , 32%)                                   ! upcase
        !
        !	locate the proc's name in the health registry array (it may not be there)
        !
        for i% = 1% to count_process%
            if registry_names$(k_scope_process, i%) = junk$ then
                registry_flags%(k_scope_process, i%) = 1              ! show it found
                goto early_scan_proc_exit
            end if
        next i%
        early_scan_proc_exit:
    next
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av AndersG »

Visst, strukturerad BASIC har lånat hej vilt från strukturerade språk, men varför då inte skriva i ett språk som från början är byggt för att vara strukturerat? Tex C/Pascal/Java?

Edit: Sedan är det ju en himla skillnad om man skriver för ett GUI (windows/mac/linux), för Webben eller för en PIC.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Kaggen »

Jag förstår dock inte vitsen med att lära sig någon BASIC dialekt som passar för en tillverkare eller ett fabrikat av uC när man kan lära sig en standard som C och regera allt som har med microcontrollers och processorer att göra.

Dessutom är det ju till synes bara 1% BASIC kvar i BASICen för dom flesta uC idag. 99% av dagens BASIC (speciellt för uC) är ju rippat från C. När jag började behövde man sällan eller aldrig fundera över pekare i BASIC eller typer. Om du kör BASIC på en uC måste du ju iaf lära dig pekare och typer, så poängen är ju helt borta. Dessutom lär du dig ju bara en BASIC dialekt. Skall du byta uC till nästa projekt måste du lära dig en ny + nya datablad och arkitektur.

Sedan kan jag sticka ut hakan lite till nu när jag ändå börjat och säga att syntaxmässigt är det inte så väldans stor skillnad på C och BASIC. Båda språkan har if, else, while, for, switch (numera också många BASIC dialekter). Skulle kunna tippa att 15% av tiden man lär sig programmera microprocessorn som nybörjare är C syntax, resten är ju register arkitektur datablad och annat. Kanske det skulle ta 5% om man istället valde BASIC om man nu är van vid det.

Kan man inget språk kan man lika gärna börja med C. Vill man verkligen veta hur saker fungerar under huven kan man kolla assembler.
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Icecap »

Tony: i ditt "exempel" finns det avsevärd fler funktioner i assemblerkoden än vad du skriver i PBP så ska du jämföra är det bäst att hålla sig till sanningen eller hur?

Men ja, i assembler är det en del mer att skriva men då har man koll på exakt vad som händer! Att någon har skrivit en färdig funktion som du använder i PBP är knappast en nyhet, det finns det i alla högnivåspråk och detta kan även vara fallet i assembler, problemet är att man i högnivåspråk inte har koll på hur dessa rutiner egentligen ser ut.

Till vardag kan detta vara ett minimalt problem men i vissa fall kan det vara mycket viktigt att ha koll på den del. Detta problem finns med alla högnivå-språk.

Och jag fasthåller att BASIC är skit!

Att det finns C-varianter med "BASIC"-syntax är inte imponerande, då är det bättre att gå direkt på C/Pascal och faktisk lära sig ett programmeringsspråk som det finns en standard på (t.ex. ANSI C) när det likaväl ar samma resultat.

Väljer man att ha en standardiserat språk kan man t.o.m. återanvända rutiner utan att få problem, jag har använd en och samma bit-bang SPI-rutin till en Fujitsu 16 bit processor, PIC16 och Renesas M16C helt utan ändring(!) då den är skrivit i ett standardiserat språk. Denna SPI-rutin har jag oftast använd för att kommunicera med ett EEPROM - vilket jag också har en färdig fil för - som jag har använd oändrat till de samma processorer...

Har använd olika definitioner till att säkerställa kommunikationen mellan PC och olika projekt, alla definitioner definieras i en och samma fil och efter en kompilering till PC och till projekten är allt synkroniserat.

Gör det i PBP...
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Andy »

Du förstår nog inte vad jag menar, Basic och liknande språk används av många proffs idag. Deras chefer accepterar inte att de uppfinner hjulet för varje nytt projekt! De färdiga rutiner som finns gör allting så mycket snabbare från tanke till fungerande applikation. Även de som kodar i asm snor färdiga stycken av ”gammal” kod för att hinna med och det är egentligen ingen skillnad därför att basic kommandona är egentligen samma sak, ett stycke asm-kod skrivit vid ett tidigare tillfälle.
Sedan ser jag absolut ingen nackdel med strukturerad programmering d v s C- varianter med ”Basic syntax”. Basic är inte skit för alla, bara för ett fåtal.

Det är skillnad på snickaren som tar med sig lådan med spik till 3’e våningen där han ska jobba och hans kollega som springer ner för trapporna för att hämta varje spik han ska slå i. Byggbasen vet vem han ska välja när det är brådis!
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Icecap »

Det är nog DU som inte förstår!

Din liknelse är helt OK men du glömmer att ett icke-standardiserat språk gör att man måste hämta varje spik om det blir en annan brädtyp som ska spikas fast. Med ett standardiserat språk är det bara att smälla upp skiten, skulle brädan bli en annan fungerar spiken ändå.

Återanvänd dina "färdiga" PBP-rutiner utan omskrivning om du plötsligt måste använda en ARM-processor...
Nä, man vad säger du? Finns det inte PBP till ARM?
Oj då, då kan du bara kasta alla spiken och börja samla en ny låda innan du kan utföra jobbet...

Jag har som skrivit återanvänd rutiner som jag gjorde 1999 helt utan ändringar, bara att definiera pinnarna och sedan inkludera filen och då kör det, vara sig det är på PIC, FFMC-16LX eller Renesas M16C/R8C vilket är dom jag har testat på.

Det är en av fördelarna vid ANSI C... du vet, det är ett standardiserat språk och det ger fördelar...

Samma med kommunikationen mellan serviceprogrammet till en Janfire NH-brännare och brännaren, alla definitioner som hör till kommunikationer finns i en och samma fil, den används i båda ANSI C-programmet till brännaren och till det Borland C Builder 6-projekt jag gör PC-programmet i och det har inte varit en enda miss i kommunikationen, något som annars händer synnerligt enkelt när man ska definiera samma saker i 2 olika projekt, det blir ibland till att man lägger in en sak i det ena men glömmer det andra och då blir det skit och mycket svårt att hitta.

Snacka om att hämta spiken ett åt gången då... problemet är då nog mest att man inte kan hitta spiken till att börja med.

Så jag fasthåller: BASIC i alla dess former är skit! Detta påstående baseras inte på vad man kan åstadkomma men på att det inte är standardiserat! Och därmed inte portabelt till andra system.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av v-g »

Ett BASIC exempel där man inte vet vad man sysslar med är att man tex kan sätta en serieport på vilka pinnar som helst i en PIC då det i "verkligheten" bara finns två "riktiga" anslutningspinnar (TX/RX)(nyare pic kan iofs byta mellan olika pinnar).

Surt att där ibland kanske sitter en hel hårdvaruUSART som inte används pga okunskap. Tror det är svårt att göra en mjukvaruserieport lika bra som en i hårdvara ;)

Upptäckte detta själv då jag undersökte en assemblerkod som var genererad av någon BASICvariant. Behöver jag nämna att jag för i princip samma funktion hade en .hex-fil på en tiondel av storleken.

MEN och detta är faktist ett megastort MEN; i detta fal duger vad som helst, funktionen är extremt simpel så det är bara att köra minsta motståndets lag.
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Andy »

Icecap : Jo, jag förstår vad du pratar om men du förstår inte vad jag pratar om.

Som hobbyist i synnerhet så byter man kanske inte MCU leverantör varje vecka, själv har jag bara bytt en gång för flera år sedan (när jag upptäckte att bl a A/D omvandlarna i AVR’erna var på tok för långsamma, men det är en annan historia).
Jag menar att man inte behöver ABCDE körkort och flygcert. för att cykla! Om jag som hobby-elektroniker bygger ett dussin MCU-projekt per år så finns det absolut ingen anledning för mig att lära ett språk som funkar för varje tänkbar tillverkares modell av MCU!
Om man sedan ”nöjer sig med” PIC & AVR så funkar t ex Great Cow basic på båda två!

Du får ursäkta men jag tror faktiskt att en ECU till en bilmotor kräver betydligt mer inte minst kodmässigt än en pelletsbrännare.
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Jag behöver tidsstyra tre relän, pic?

Inlägg av Icecap »

Kanske DU inte byter processor lite då och då och det är väl bra men samtidig kan jag förstå att du aldrig heller gör program till PC så att den kan prata med/styra en PIC-projekt och det gör dig nog ganska unik att inte ha dessa behov...

Men likaväl finns det ingen orsak att lära sig ett språk som påstås vara BASIC men egentligen är något annat - ganska odefinierat, ska man lära sig kan man likaväl lära ett som det finns en standard på så att det fungerar på många plattformar, då blir det synnerligt mycket lättare att migrera och kanske även ta med sig verktygen. Är man rudis på programmering är det sannolikt lika besvärligt att lära sig PBP som C, skillnaden är bara att C kan man använda i andra miljöer, PBP kan man torka sig med i andra miljöer.

Och faktisk är en pelletsbrännare nog MER mjukvaraintensiv än en ECU! Alla säkerhetskrav, återmatningar, övervakning, sekvenser som ska styras och inställningsmöjligheter är faktisk en bit över en ECU... men sedan är brännaren också godkänd till försäljning i USA, "land of the lawsuit".

Och ja, för en del år sedan byggde jag en insprutningsdator till en 4-cylindrig motor men av ekonomiska skäl blev resten inte verklighet. Man kunde då mappa allting via en seriell port medan motorn körde, mjukvaran var så färdig den kunde bli utan att köra skarpt så jag känner till skillnaden mellan en ECU och en pelletsbrännare - och pelletsbrännaren jag är involverat i slår ECU'n med hästlängder...
Skriv svar