Hírek:

Fontos tudnivalók a migrációval kapcsolatban, Kérlek nézd meg a Régi fórumról új fórumra való költözés

Main Menu

Segítség, béna vagyok!

Indította gaben, 2024 április 09, 15:35

Előző téma - Következő téma

4ybj8h3c8

Í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.

s7manbs8

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

000000000

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);
}  
}

000000000

É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)

9hpa53xy

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 :)

9hpa53xy


s7manbs8

PORTD=(PIND&(~(1<<3)))|(~PIND)&(1<<3));
 
na ez elvileg megfordítja a bitet, ha jól írtam meg.

s7manbs8

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.

s7manbs8

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. :)

9hpa53xy

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.

s7manbs8

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;
}

s7manbs8

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 ?

9hpa53xy

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

s7manbs8

#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;
}

s7manbs8

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