HobbyCNC fórum
FTP tárhely: http://cnctar.hobbycnc.hu v0.9.6 Régi HobbyCNC oldal: http://archiv.hobbycnc.hu

Új regisztráció / Átregisztráció a régi fórumról
    
   


Segítség, béna vagyok!!!

Általános, gyors, sürgős kérdések.

 

Időrend:
Oldal 499 / 1039 Ugrás ide:
Sorok:
|◄ Első  ◄ Előző   495  496  497  498  499  500  501  502  503   Következő ►  Utolsó ►|

  Fórum főoldal  |  A lap aljára

elektron | 15859    2015-09-16 20:13:00 [27092]

A kettőspontok nem kellenek oda.

Előzmény: Rasiel, 2015-09-16 19:28:00 [27089]


keri | 14014    2015-09-16 20:12:00 [27091]

regisztráltál egy e-mail címet, oda fog jönni a válasz, abba a fiókba, hogy itt mit írtál azt sehol nem fogod látni miután elküdted, legfeljebb a reply-ben, ha nem törli ki a válaszoló.

Előzmény: PR, 2015-09-16 20:08:00 [27090]


PR | 119    2015-09-16 20:08:00 [27090]

Sziasztok! Egy hülye kérdést engedjetek meg. Azt hiszem talán ez a legjobb topik erre
Ha a fórumon belül írtam valakinek e-mailt és válaszol rá, akkor azt hol fogom látni/megtalálni? Vagy eleve az általam küldött levelet hol látom?

Eddig nagyrészt csak olvastam a fórumot és ezzel a részével nem nagyon vagyok tisztában.

Előre is köszönöm!


Rasiel | 480    2015-09-16 19:28:00 [27089]

A sok zárójel és logikai szintaxis miatt valóban kicsit nyakatekert, bár kezdem átlátni.
Bár...

#define key_d0_dir : SBIT(DDRB,PIN7)
#define key_d1_dir : SBIT(DDRD,PIN7)
#define key_d2_dir : SBIT(DDRC,PIN0)
#define key_d3_dir : SBIT(DDRC,PIN1)
#define key_d4_dir : SBIT(DDRC,PIN2)
#define key_d5_dir : SBIT(DDRC,PIN3)
#define key_d6_dir : SBIT(DDRC,PIN4)
#define key_d7_dir : SBIT(DDRC,PIN5)


...


void sysinit()
{
piezo_out_dir=1;

key_d0_dir=1;
key_d1_dir=1;
key_d2_dir=1;
key_d3_dir=1;
key_d4_dir=0;
key_d5_dir=0;
key_d6_dir=0;
key_d7_dir=0;
}

és "expected primary-expression before ':' token

ezt most itt miért amikor a piezo outra hagyja magát?

Előzmény: elektron, 2015-09-16 19:06:00 [27087]


Rasiel | 480    2015-09-16 19:26:00 [27088]

Köszi a biztatást, igyekszem

Előzmény: n/a (inaktív), 2015-09-16 19:03:00 [27086]

elektron | 15859    2015-09-16 19:06:00 [27087]

Kicsit fordítva van pár dolog, a változó deklarálás, begin end helyett {} stb, nem sok a különbség annyira, van ahol kell () zárójelbe tenni, az and helyett && ha logikai kapcsolatot akarsz, ha mint művelet akkor csak egy darab kell, or helyett || ha logikai, ha bitenkénti, akkor meg egy belőle, a függvényeknél is elöl van, hogy mi a típusa a visszatérő értéknek ... stb.


n/a (inaktív)    2015-09-16 19:03:00 [27086]

Pascal után valóban kifordítottnak tűnhet a C.
Szerintem tanulmányozd a szintaktikát, szemantikát és a fordító specifikus dolgokat, ha ezeket elsajátítod akkor már menni fog, a logikája ugyanaz mint a Pascal-nak.

Előzmény: Rasiel, 2015-09-16 18:56:00 [27085]


Rasiel | 480    2015-09-16 18:56:00 [27085]

Köszi! érthetetlen egy nyelv ez a C

Előzmény: elektron, 2015-09-16 18:45:00 [27084]


elektron | 15859    2015-09-16 18:45:00 [27084]

if ((KEY_D4_In==0)&&(KEY_D5_In==0)&&(KEY_D6_In==0)&&(KEY_D7_In==0))
{ // then
// ide, meg amit ekkor hajtasz végre
}


Rasiel | 480    2015-09-16 18:21:00 [27083]

If (KEY_D4_In=0) and (KEY_D5_In=0) and (KEY_D6_In=0) and (KEY_D7_In=0) then

ez hogy nézne ki helyesen C-ül ?


elektron | 15859    2015-09-16 17:59:00 [27082]

Az meg ez:

#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))

tehát (*(volatile uint8_t *)(mem_addr))

Előzmény: elektron, 2015-09-16 17:54:00 [27081]


elektron | 15859    2015-09-16 17:54:00 [27081]

A PORTD az ez:

#define PORTD _SFR_IO8 (0x0B)

Előzmény: n/a (inaktív), 2015-09-16 17:24:00 [27080]


n/a (inaktív)    2015-09-16 17:24:00 [27080]

Bitenként nem lehet hivatkozni a változó bitjeire?
Így gondolom:

PORTD.3 = 0;

és szerintem a DDRD 3. bitjét 1-be kéne állítanod, hogy kimenet legyen az a láb, különben bemenet.

Előzmény: Rasiel, 2015-09-16 16:40:00 [27076]


elektron | 15859    2015-09-16 16:43:00 [27079]

#define PIEZO_OUT SBIT(PORTD, PIN3)
#define PIEZO_IN SBIT(PIND, PIN3)

...

PIEZO_OUT=~PIEZO_IN;



valami ilyesmi


elektron | 15859    2015-09-16 16:41:00 [27078]

A lényeg, hogy olvasáskor PIND van ott, íráskor meg PORTD !!!

Előzmény: Rasiel, 2015-09-16 16:40:00 [27076]

elektron | 15859    2015-09-16 16:41:00 [27077]

Ha SBIT-tel akarod, akkor meg így néz ki elvileg: a toggle:

SBIT(PORTD, PIN3)=~SBIT(PIND, PIN3);


Rasiel | 480    2015-09-16 16:40:00 [27076]

úgy maszkolással hogy egy-egy i/o lábat változóként kezelsz, nem byteként. pl pascalban:

CD_RS_Direction : sbit at DDB0_bit;

Előzmény: elektron, 2015-09-16 16:37:00 [27074]


elektron | 15859    2015-09-16 16:38:00 [27075]

Itt egy sbit.h is :

#ifndef sbit_h_
#define sbit_h_

#include <avr\io.h>

// Access bits like variables:
struct bits {
uint8_t b0:1;
uint8_t b1:1;
uint8_t b2:1;
uint8_t b3:1;
uint8_t b4:1;
uint8_t b5:1;
uint8_t b6:1;
uint8_t b7:1;
} __attribute__((__packed__));

#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
#define SBIT(x,y) SBIT_(x,y)

#endif


elektron | 15859    2015-09-16 16:37:00 [27074]

Hogy maszkolással ?

Ez a sor pont azt csinálja.

PORTD=(PIND&(~(1<<3)))|((~PIND)&(1<<3));

PIND&(~(1<<3)) ez a PORTD 3. bitje
(~PIND)&(1<<3) ez ugyanannak a negáltja
majd vagy kapcsolattal összerakódik.

Előzmény: Rasiel, 2015-09-16 16:35:00 [27073]


Rasiel | 480    2015-09-16 16:35:00 [27073]

Biztosan működik, de maszkolással kellene. ez a kulcsa az egésznek.

Előzmény: elektron, 2015-09-16 16:28:00 [27072]


elektron | 15859    2015-09-16 16:28:00 [27072]

Ezt próbáld meg:



#ifdef F_CPU
#undef F_CPU
#endif

#define F_CPU 16000000UL // órajeled frekije


#include <avr/io.h>
#include <util/delay.h>


void beep() {

uint16_t cycle;
for (cycle=0; cycle<5000; cycle++)
{
PORTD=(PIND&(~(1<<3)))|((~PIND)&(1<<3));
_delay_ms(1);
}
}



int main() {

DDRD=(1<<3); // kimenetre állítva a 3. bit a többi bemenet

while (1)
beep();
return 0;
}


elektron | 15859    2015-09-16 16:24:00 [27071]



#ifdef F_CPU
#undef F_CPU
#endif

#define F_CPU 16000000UL // órajeled frekije


#include <avr/io.h>
#include <util/delay.h>


void beep() {

uint16_t cycle;
for (cycle=0; cycle<5000; cycle++)
{
PORTD=(PIND&(~(1<<3)))|((~PIND)&(1<<3));
_delay_us(1);
}
}



int main() {

DDRD=(1<<3); // kimenetre állítva a 3. bit a többi bemenet

while (1)
beep();
return 0;
}

Előzmény: Rasiel, 2015-09-16 16:20:00 [27070]


Rasiel | 480    2015-09-16 16:20:00 [27070]

lefordul, be is égethető, és nem csinál semmit :3

Előzmény: Rasiel, 2015-09-16 16:19:00 [27069]


Rasiel | 480    2015-09-16 16:19:00 [27069]

#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <util/sbit.h>


// LCD pinout definition
/*var
LCD_RS : sbit at PORTB0_bit;
LCD_EN : sbit at PORTB1_bit;
LCD_D4 : sbit at PORTB2_bit;
LCD_D5 : sbit at PORTB3_bit;
LCD_D6 : sbit at PORTB4_bit;
LCD_D7 : sbit at PORTB5_bit;
//
LCD_RS_Direction : sbit at DDB0_bit;
LCD_EN_Direction : sbit at DDB1_bit;
LCD_D4_Direction : sbit at DDB2_bit;
LCD_D5_Direction : sbit at DDB3_bit;
LCD_D6_Direction : sbit at DDB4_bit;
LCD_D7_Direction : sbit at DDB5_bit;*/

//keypad definitions
#define key_d0_dir : SBIT(DDRB,7)
#define key_d1_dir : SBIT(DDRD,7)
#define key_d2_dir : SBIT(DDRC,0)
#define key_d3_dir : SBIT(DDRC,1)
#define key_d4_dir : SBIT(DDRC,2)
#define key_d5_dir : SBIT(DDRC,3)
#define key_d6_dir : SBIT(DDRC,4)
#define key_d7_dir : SBIT(DDRC,5)
//
#define key_d0_out SBIT(PORTB,7)
#define key_d1_out SBIT(PORTD,7)
#define key_d2_out SBIT(PORTC,0)
#define key_d3_out SBIT(PORTC,1)
#define key_d4_out SBIT(PORTC,2)
#define key_d5_out SBIT(PORTC,3)
#define key_d6_out SBIT(PORTC,4)
#define key_d7_out SBIT(PORTC,5)
//
#define key_d0_in SBIT(PINB,7)
#define key_d1_in SBIT(PIND,7)
#define key_d2_in SBIT(PINC,0)
#define key_d3_in SBIT(PINC,1)
#define key_d4_in SBIT(PINC,2)
#define key_d5_in SBIT(PINC,3)
#define key_d6_in SBIT(PINC,4)
#define key_d7_in SBIT(PINC,5)
//
#define spkout SBIT(PIND,3)
#define spkout_dir SBIT(DDRD,3)

unsigned char lastack;
unsigned char lastnack;
unsigned char currentsyn;
unsigned char lastsyn;
unsigned char eat;
unsigned char pdt;

char passcode[4];
char newcode1[4];
char newcode2[4];

bool armed;
bool proximity;
bool commerror;
bool showzones;
bool zone0;
bool zone1;
bool zone2;
bool zone3;
bool zone4;
bool zone5;
bool zone6;
bool zone7;
bool zone8;
bool zone9;


//******************************************************************************
//** Beep **
//******************************************************************************
void beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
{
spkout = !spkout;
_delay_us(80);
}
}


//******************************************************************************
// M A I N P R O G R A M
//******************************************************************************
int main(void)
{

spkout_dir==1;
while(1)
{
beep();
}
}

Előzmény: elektron, 2015-09-16 16:17:00 [27068]


elektron | 15859    2015-09-16 16:17:00 [27068]

Amit itt beírtam az lefordul itt, nálad mi a gond, mit ír ki ?

Előzmény: Rasiel, 2015-09-16 16:15:00 [27066]

elektron | 15859    2015-09-16 16:16:00 [27067]

#include <avr/io.h>
#include <util/delay.h>

void beep() {

uint16_t cycle;
for (cycle=0; cycle<5000; cycle++)
{
PORTD=(PIND&(~(1<<3)))|(~PIND)&(1<<3);
_delay_us(1);
}
}



int main() {

DDRD=(1<<3); // kimenetre állítva a 3. bit a többi bemenet

while (1)
beep();
return 0;
}

Előzmény: Rasiel, 2015-09-16 15:58:00 [27063]


Rasiel | 480    2015-09-16 16:15:00 [27066]

be van dugva a cucc, de a maszkolós verzió nem fodul le....

Előzmény: elektron, 2015-09-16 16:14:00 [27065]


elektron | 15859    2015-09-16 16:14:00 [27065]

Ha be van dugva a cuccodd, meglátod szól e , persze a PORTD 3. bitet még kimenetre kell kapcsolni, az még hiányzik belőle a

DDRD 3. bitje vagy már az a programodba be van állítva az illető bit kimenetre ?

Előzmény: Rasiel, 2015-09-16 15:58:00 [27063]


elektron | 15859    2015-09-16 16:11:00 [27064]

Ez lefordul biztos, most írtam be az AVR Studio-ba.

#include <avr/io.h>
#include <util/delay.h>

void beep() {

uint16_t cycle;
for (cycle=0; cycle<5000; cycle++)
{
PORTD=(PIND&(~(1<<3)))|(~PIND)&(1<<3);
_delay_us(1);
}
}



int main() {

while (1)
beep();
return 0;
}

Előzmény: Rasiel, 2015-09-16 15:52:00 [27059]


Rasiel | 480    2015-09-16 15:58:00 [27063]

Igen, na ez az a része a C-nek amit igazán nem értek. Jobb szeretem maszkolni az I/O lábakat, mivel szegény mega 328as minden lába foglalt és mivel elég bután sikerült kihozni őket így nincs csak egy teljes értékű I/O regiszterem.

Előzmény: elektron, 2015-09-16 15:54:00 [27060]


elektron | 15859    2015-09-16 15:56:00 [27062]

Ide nem kell sbit.h se. Pont ezzel játszottam tegnap a távcső vezérlőm programjában is., csak kicsit még tompa a fejem, de majd belejövök estére.

Előzmény: elektron, 2015-09-16 15:55:00 [27061]


elektron | 15859    2015-09-16 15:55:00 [27061]

Olvasáskor a PIND-t kell olvasni, íráskor meg a PORTD-re kell írni. Én itt byte formában csináltam meg. a toggle funkciót.

Előzmény: Rasiel, 2015-09-16 15:52:00 [27059]


elektron | 15859    2015-09-16 15:54:00 [27060]

PORTD=(PIND&(~(1<<3)))|(~PIND)&(1<<3));

na ez elvileg megfordítja a bitet, ha jól írtam meg.

Előzmény: Rasiel, 2015-09-16 15:43:00 [27052]


Rasiel | 480    2015-09-16 15:52:00 [27059]

Köszönöm!

Előzmény: n/a (inaktív), 2015-09-16 15:49:00 [27057]


Rasiel | 480    2015-09-16 15:51:00 [27058]

ott a pont. ez volt a baj, most az SBIT utasításra rinyál, valahonnan le kell vadászni hozzá az sbit.h-t

Előzmény: n/a (inaktív), 2015-09-16 15:49:00 [27057]

n/a (inaktív)    2015-09-16 15:49:00 [27057]

És szerintem a pin definíció sem jó, persze ebben lehet tévedek, mert nem ismerem az AVR studiót, de sztem így kéne:

#define spkout SBIT(PORTD,3)
#define spkout_dir SBIT(DDRD,3)

Előzmény: Rasiel, 2015-09-16 15:44:00 [27053]


n/a (inaktív)    2015-09-16 15:48:00 [27056]

pontosvesszők hiányoznak sorok végéről.
A függvényednek int a visszatérési értéke, de nem ad vissza semmit.

void beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
{
spkout = !spkout;
_delay_us(80);
}
}

Előzmény: Rasiel, 2015-09-16 15:44:00 [27053]


elektron | 15859    2015-09-16 15:46:00 [27055]

Imádom a C nyelvet, csak tudni kell pár dolgot, ami lényege.

Előzmény: Rasiel, 2015-09-16 15:43:00 [27052]


lazi | 1489    2015-09-16 15:45:00 [27054]

Ízlések és pofonok

Basicben kb. 6 sor volt egy 30000-ig kijelző fordulatszámmérő, C-ben ez kicsit macerásabb.
Ha muszáj a sebesség akkor C és Assembler, ha mindegy akkor egyszerűbb a Basic.

Előzmény: n/a (inaktív), 2015-09-16 15:26:00 [27046]


Rasiel | 480    2015-09-16 15:44:00 [27053]

//******************************************************************************
//** Beep **
//******************************************************************************
int beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
{
spkout = !spkout
_delay_us(80)
}
}

Előzmény: n/a (inaktív), 2015-09-16 15:42:00 [27051]


Rasiel | 480    2015-09-16 15:43:00 [27052]

Procedure Beep;
Var
Cycle:Byte;
Begin
For Cycle:=0 to 255 do
Begin
PortD3_bit:= not PortD3_bit;
Delay_us(80);
End;
End;

Ez az eredeti kód. ezt próbálom átszenvedni C be.

Előzmény: n/a (inaktív), 2015-09-16 15:40:00 [27050]


n/a (inaktív)    2015-09-16 15:42:00 [27051]

Valahol sztem hiányzik egy pontosvessződ a sor végén, másold be a kódot ahogy most van.

Előzmény: Rasiel, 2015-09-16 15:39:00 [27049]


n/a (inaktív)    2015-09-16 15:40:00 [27050]

Még annyi, hogy ez így egy 1Mhz-es jel lesz 255usec hosszú, ha ezt egy piezo buzzeren akarod hallani, az nem fog menni. tegyél be több várakozást a ciklusba.

Előzmény: Rasiel, 2015-09-16 15:26:00 [27047]


Rasiel | 480    2015-09-16 15:39:00 [27049]

ugyanaz....
33 expected '' before ':' token
32 expected primary-expression before ':' token

:/

Előzmény: n/a (inaktív), 2015-09-16 15:36:00 [27048]


n/a (inaktív)    2015-09-16 15:36:00 [27048]

Az spkout változót ha jól látom egy bitnek definiáltad. A ~ operátor szerintem csak byte vagy int stb. változókon negálást csinál, szerintem ez biten nem fog működni, igaz nem ismerem az AVR studiót, de sztem ez lesz a probléma.

próbáld meg bit invertálással:

spkout = !spkout;

Előzmény: Rasiel, 2015-09-16 15:26:00 [27047]

Rasiel | 480    2015-09-16 15:26:00 [27047]

#define spkout : SBIT(PORTD,3)
#define spkout_dir : SBIT(DDRD,3)

int beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
{
spkout = ~spkout
_delay_us(1)
}
}

rá van kötve egy piezzo az egyik lábra, és ha meghívod az eljárást, akkor idegesítő hangot ad.

bocs, pascalos vagyok, de sajnos váltanom kell.

spkout = ~spkout < itt akad el.

Előzmény: elektron, 2015-09-16 15:19:00 [27043]


n/a (inaktív)    2015-09-16 15:26:00 [27046]

Éppen ezek miatt a dolgok miatt átlátható a C nyelv.

Előzmény: lazi, 2015-09-16 15:25:00 [27045]


lazi | 1489    2015-09-16 15:25:00 [27045]

No pont az ilyenek miatt rühellem a C programozást.

Előzmény: n/a (inaktív), 2015-09-16 15:22:00 [27044]


n/a (inaktív)    2015-09-16 15:22:00 [27044]

Javítva a fgv.:

int beep()
{
int cycle;
for (cycle=0; cycle==255; cycle++)
{
spkout = spkout;
_delay_us(1);
}
}

A hiba a for ciklusban van, a feltételnél két egyenlőség jel kell, mert összehasonlítás.
A másik hiba a spkout == spkout;, ennél egy egyenlőség jel kell csak, mert értékadás.
Igaz az spkout = spkout; sornak nem nagyon van értelme, hogy egy változó felvegye önmaga értékét, ez a sor így nem csinál semmit...


elektron | 15859    2015-09-16 15:19:00 [27043]

for (cycle=0; cycle=255; cycle++) helyett

for (cycle=0; cycle<255; cycle++) ez akarna klenni gondolom.

Na most megyek a boltba addig nem tudok segíteni míg vissza nem érek ...

Előzmény: elektron, 2015-09-16 15:17:00 [27041]


  Fórum főoldal  |  A lap tetejére

Időrend:
Oldal 499 / 1039 Ugrás ide:
Sorok:
|◄ Első  ◄ Előző   495  496  497  498  499  500  501  502  503   Következő ►  Utolsó ►|


 ◊