 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5530 Aktiv.: 24.05 Kraj: Domzale
|
Objavljeno: Sob Feb 26, 2011 8:51 pm Naslov sporočila: |
|
|
Pa imaš diodo na ključavnici?
Točno takšne probleme je imel en forumaš, ki je delal mojo "ključavnico" in je diodo nekako spregledal ...
LP, Grega
_________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
 |
protoncek Član

Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 42.77 Kraj: Mengeš
|
Objavljeno: Sob Feb 26, 2011 9:12 pm Naslov sporočila: |
|
|
Vilko, ne, ne....saj ni vojna, samo razprava. Podobno kot pogovor o tem, katero pivo je boljše - laško ali union? Sem pripravljen spiti enega ali drugega, samo potrebujem kakšen razlog, zakaj je eden ali drugi boljši (no, v specifičnem primeru je dovolj dober razlog že to da npr. Uniona nimajo )
Mucek - imam diodo ter 100n kondenzator. Mislim da imam celo dvakrat diodo -eno na relejskih kontaktih in še eno direkt pri sami ključavnici. (na releju je itak tudi dioda). Mislim da če bi celo zadevo naredil kot treba, do tega ne bi prihajalo...najprej sem pozabil dati tuljavo na 5V napajanje, se je to dogajalo skoraj vsakič, potem pa recimo vsakih 10-20 odpiranj...
|
|
Nazaj na vrh |
|
 |
Tomazp Član


Pridružen-a: Sob 02 Feb 2008 13:24 Prispevkov: 559 Aktiv.: 2.64 Kraj: Ljubljana
|
Objavljeno: Tor Mar 01, 2011 2:06 pm Naslov sporočila: |
|
|
Pred kratkim je bilo vprašanje glede razlike med C in Basic. Kot zanimivost: Testiral sem enostaven praktično identičen program vklop/ izklop PORTB.0 v C (AVR Studio), CodeVision - Bascom na ATmega16, interni frekvenčni osc. 1Mhz.
Velikost kode
C AVR GCC 435bytov
C CodeVision: 549bytov
Bascom: 639bytov
Čas med posameznimi signali pina PortB0:
C AVR GCC : 1,63ms
C CodeVision: 2,02ms
Bascom: 3,63ms
Zanimivo je tudi, da je razmerje hitrosti odvisno od uporabljenih ukazov. Včasih je večje ali manjše.
Program C GCC:
#include <avr/io.h>
int main(void)
{
DDRB|=(1<<0);
while(1)
{
for(int i = 1; i <= 100; i++)
{
PORTB|=(1<<0);
}
for(int i = 1; i <= 100; i++)
{
PORTB&=~(1<<0);
}
}
return 1;
}
C Codevision
#include <mega16.h>
void main(void)
{
int i;
DDRB|=(1<<0);
while (1)
{
while(1)
{
for(i = 1; i <= 100; i++)
{
PORTB|=(1<<0);
}
for(i = 1; i <= 100; i++)
{
PORTB&=~(1<<0);
}
}
}
}
Bascom:
$regfile = "m16def.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 40
Dim A As Byte
Config Portb.0 = Output
Do
For A = 1 To 100
Portb.0 = 1
Next A
For A = 1 To 100
Portb.0 = 0
Next A
Loop
Nazadnje urejal/a Tomazp Tor Mar 01, 2011 5:07 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3362 Aktiv.: 14.19 Kraj: Dragomer
|
Objavljeno: Tor Mar 01, 2011 2:44 pm Naslov sporočila: |
|
|
Ej, to je lep primer primerjave dveh programskih jezikov, Tomazp! Kaj takega sem si dolgo želel.
Rezultati so v korist C-a, v kolikor sta velikost programa in hitrost relevantna. Tu ima vsak svoje mnenje, nekomu bajti flasha veliko pomenijo, drugi se ne sekira in vzame večji procesor. (jaz sem že prilezel na ATMEGA64. Pred vsem zaradi obilice RAM-a. Često obravnavam prav dolge stringe, SMS sporočila.)
Pri hitrostih imam večje spoštovanje. Često je potrebno kaj narediti hitro.
Ali bi hotel narediti še dva taka poizkusa, meni bi veliko pomenilo.
Naredi C variatno programčkov bascoma, ki prilagam:
Koda: |
$regfile = "m644pdef.dat"
$crystal = 11059200
' Terminal emulator na pinu A.1
' =====================
Open "coma.1:9600,8,n,1" For Output As #2
Print #2 , "Hej! Ljudje! "
End
Close #2
|
in drugi:
Koda: |
$regfile = "m32def.dat"
$crystal = 11059200
' LCD na portu C
' ===========
Config Lcdpin = Pin , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5 , Db4 = Portc.4 , E = Portc.3 , Rs = Portc.2
Lcd "Hej! Ljudje!"
end |
Pri tem me bolj kot velikost programa in hitrost zanima razlika v izvirni kodi. Seveda lahko uporabiš vse funkcije, ki so na razpolago v ta namen v standardnih knjižnicah.
|
|
Nazaj na vrh |
|
 |
Tomazp Član


Pridružen-a: Sob 02 Feb 2008 13:24 Prispevkov: 559 Aktiv.: 2.64 Kraj: Ljubljana
|
Objavljeno: Tor Mar 01, 2011 5:09 pm Naslov sporočila: |
|
|
V zgornjo meritev sem dodal še CodeVision. Zanimiv podatek.
Za serijsko komunikacijo in primerjavo moram pa še prej pogledat nastavitev registrov.
|
|
Nazaj na vrh |
|
 |
protoncek Član

Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 42.77 Kraj: Mengeš
|
Objavljeno: Tor Mar 01, 2011 5:31 pm Naslov sporočila: |
|
|
vilko, vidiš da nisi naredil nič slabega---! samo koristno razpravo si odprl.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.92 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Mar 01, 2011 6:21 pm Naslov sporočila: |
|
|
Za prvi vilkov primer assembler. (softwreski serijski port - za hardwerskega bi bilo kode še manj) Na testni namreč imam ravno tiny13
Koda: |
;test softverski serijski port
.include "tn13def.inc"
.def CasOff=r2
.def tmp=r16
.def SerData=r17
.equ TxPin=4 ;pin uart TX
#define TxPort Portb,TxPin
.org 0x0
rjmp GlProg
.org 0x13
GlProg:
ldi tmp,low(ramend)
out SPL,tmp
sbi DDRB,TxPin
ldi tmp,0x62
out OSCCAL, tmp
Gz1:
rcall Pisi
rjmp Gz1
Tekst:
.db "Hej! Ljudje!",0
Pisi:
ldi ZH,high(Tekst*2)
ldi ZL,low (Tekst*2)
NextText:
lpm SerData,Z+
tst SerData
breq KonecTeksta
rcall Tx
rjmp NextText
KonecTeksta:
ret
;-----------------------------------------------------------
;serijsko poÜiljanje
;9600 bps POZOR ne pozabi kalibrirat internega oscilatorja
;------------------------------------------------------------
Tx:
cbi TxPort
rcall Pavza104uS ;startbit
ldi tmp,8
NasBit:
ror SerData
brcc HBit
sbi TxPort
rjmp Pavza
HBit:
cbi TxPort
Pavza:
rcall Pavza104uS
dec tmp
brne NasBit
; rcall Pavza104uS ;bit party
sbi TxPort
rcall Pavza104uS ;stop bit
ret
;-----------------------------------------------------------
;Pavza 104uS Oscilator 4,8Mhz
;-----------------------------------------------------------
Pavza104uS:
push r20
ldi r20,162
P_zanka:
dec r20
brne P_zanka
pop r20
nop
nop
ret
|
Velikost hex kode 301 byte
Zasedenost tiny13
Koda: |
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x00007e 76 14 90 1024 8.8%
[.dseg] 0x000060 0x000060 0 0 0 64 0.0%
[.eseg] 0x000000 0x000000 0 0 0 64 0.0% |
Opis: |
|
Velikost datoteke: |
215.81 KB |
Pogledana: |
28 krat |

|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Tor Mar 01, 2011 8:42 pm Naslov sporočila: |
|
|
Kaj pa to:
C:
Bascom:
Je razlika če uporabiš: unsigned char i; ?
|
|
Nazaj na vrh |
|
 |
forest70 Član


Pridružen-a: Ned 20 Jul 2008 1:00 Prispevkov: 588 Aktiv.: 2.86 Kraj: Koper
|
Objavljeno: Tor Mar 01, 2011 9:07 pm Naslov sporočila: |
|
|
igor_k je napisal/a: |
Kaj pa to:
C:
Bascom:
Je razlika če uporabiš: unsigned char i; ? |
unsigned char i - pomeni, da je vrednost med 0 in 255
char i - pomeni, da je lahko vrednost med -127 in 128
|
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Tor Mar 01, 2011 9:41 pm Naslov sporočila: |
|
|
Citiram: |
unsigned char i - pomeni, da je vrednost med 0 in 255
char i - pomeni, da je lahko vrednost med -127 in 128 |
govorim o zamenjavi:
z
ker v Bascomu je uporabil:
|
|
Nazaj na vrh |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Tor Mar 01, 2011 9:53 pm Naslov sporočila: |
|
|
Ja, razlika je v obsegu oziroma velikosti spremenljivke.
- (signed) int: -32768 .. 32767
- unsigned char: 0 .. 255
_________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3362 Aktiv.: 14.19 Kraj: Dragomer
|
Objavljeno: Tor Mar 01, 2011 11:32 pm Naslov sporočila: |
|
|
Silvo je napisal/a: |
Za prvi vilkov primer assembler. (softwreski serijski port - za hardwerskega bi bilo kode še manj) Na testni namreč imam ravno tiny13 |
Ni kaj, Silvo! Kapo dol! Assembler obvladaš in zato tudi vse delaš v assemblerju.
Koliko časa je trajalo, da si postal mojster assemblerja?
Pozdrav in spoštovanje
Vilko
|
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Sre Mar 02, 2011 12:40 am Naslov sporočila: |
|
|
Citiram: |
Ja, razlika je v obsegu oziroma velikosti spremenljivke.
- (signed) int: -32768 .. 32767
- unsigned char: 0 .. 255
|
V Bascomu je uporabil 8 bitno spremenljivko, v C pa 16 bitno.
|
|
Nazaj na vrh |
|
 |
Tomazp Član


Pridružen-a: Sob 02 Feb 2008 13:24 Prispevkov: 559 Aktiv.: 2.64 Kraj: Ljubljana
|
Objavljeno: Sre Mar 02, 2011 9:33 am Naslov sporočila: |
|
|
Hvala za odkrito napako. Res je. Moral bi uporabit uint8_t oz. unsigned char. Kar pomeni, da mora vse skupaj biti še hitrejše in krajše.
Spodnji podatki so sedaj še zgovornejši. Novi podatki so dopisani.
Velikost kode
C AVR GCC 435bytov => 402bytov
C CodeVision: 549bytov => 504bytov
Bascom: 639bytov
Čas med posameznimi signali pina PortB0:
C AVR GCC : 1,63ms => 1,31ms
C CodeVision: 2,02ms => 1,43ms
Bascom: 3,63ms
|
|
Nazaj na vrh |
|
 |
Sadida Član


Pridružen-a: Pet 17 Apr 2009 12:53 Prispevkov: 636 Aktiv.: 3.23 Kraj: Zasavje
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|