Forum » Elektrotehnika in elektronika » Branje vhoda, posamezen bit
Branje vhoda, posamezen bit
mirch ::
V C-ju potrebujem malo pomoči. Namreč imam razvojno ploščo, ter na njo vezanih 8 diod, katere posamično svetijo od leve proti desni. Z delay_loop lahko nastaviš kolikšno hitrost od leve proti desni želiš.
Jaz bi namesto vrednosti v delay_loop-u uporabil spremenljivko - da bi večal hitrost utripanja, ter bral z porta B - en bit je hitrejše utripanje, drugi je počasnejše, tretji reset
pač bral sem samo z bitov 4, 6 in 7, ker več ne potrebujem
kako pozneje te berem?
Naprimer hočem prebrat bit 7 uporabim verjetno if(DDRB=0x80 ... ? Ali kako?
Prosim za podrobno pomoč :)
Jaz bi namesto vrednosti v delay_loop-u uporabil spremenljivko - da bi večal hitrost utripanja, ter bral z porta B - en bit je hitrejše utripanje, drugi je počasnejše, tretji reset
DDRB &= ~0xD0; // set bits 4, 6 and 7 to input PORTB |= 0xD0; // Enable pull ups on bits 4, 6 and 7
pač bral sem samo z bitov 4, 6 in 7, ker več ne potrebujem
kako pozneje te berem?
Naprimer hočem prebrat bit 7 uporabim verjetno if(DDRB=0x80 ... ? Ali kako?
Prosim za podrobno pomoč :)
mirch ::
Bom podal kar celo kodo, namreč sem zelo slab v C jeziku. Prosim ne se norčevat.
Rad bi z bitoma 6 in 7 porta B krmilil velikost spremenljivke T.
Prosim za pomoč
#include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> #include <avr/signal.h> #include <inttypes.h> #define PINB_MASK ((1<<PINB6)|(1<<PINB7)) int main (void) { int i = 0; int b = 0; int c = 0; int reset = 0; unsigned long T = 30000; // Set delay to 30000 milisec DDRD = 0xFF; //set PORTD for output DDRB &= ~0xC0; // set bits 6 and 7 to input PORTB.6 = 0; PORTB.7 = 0; PORTB |= 0xD8; PORTB |= PINB_MASK; while(1) { for(b = PORTB6; b > 0) { T = T*10; } for(c = PORTB7; c > 0) { T = T/10; } } while(1) { for(i = 1; i < 128; i = i*2) { PORTD = i; _delay_loop_2(T); } for(i = 128; i > 1; i -=i/2) { PORTD = i; _delay_loop_2(T); } } return 1; }
Rad bi z bitoma 6 in 7 porta B krmilil velikost spremenljivke T.
Prosim za pomoč
bosto ::
Ahjej. V principu, ti hočeš namesto unih dveh for zank neki takega:
V praksi to ne bo dobro delalo, ker kontakti tipk skačejo, kar pomeni da ti bo ta koda zaznala več pritiskov namesto enega. Če hočeš to rešit, moraš dodat debouncing. Pa malo pomatraj google na to temo ;)
edit: pozabu da si naštimal pull up upore na vhode.
if(PINB && !(_BV(PINB6)) { ++T; } if(PINB && !(_BV(PIN7)) { --T; }
V praksi to ne bo dobro delalo, ker kontakti tipk skačejo, kar pomeni da ti bo ta koda zaznala več pritiskov namesto enega. Če hočeš to rešit, moraš dodat debouncing. Pa malo pomatraj google na to temo ;)
edit: pozabu da si naštimal pull up upore na vhode.
Zgodovina sprememb…
- spremenilo: bosto ()
mirch ::
Nucam kakšen dan (googlanje + razmišljanje + pisanje + preizkus + neznanje) :) sporočim :)
Hvala za nasvete in pomoč bosto!
Hvala za nasvete in pomoč bosto!
mirch ::
Trenutno imam tole, vendar ne deluje:
// CylonEyes.c #include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> #include <avr/signal.h> #include <inttypes.h> int main (void) { int i = 0; unsigned long T = 15000; // Set delay to 30000 milisec DDRD = 0xFF; //set PORTD for output DDRB = 0x00; // set PORTB to input while(1) { for(i = 1; i < 128; i = i*2) { if(PINB && !(_BV(PINB6)) ) { T=30000; } if(PINB && !(_BV(PIN7)) ) { T=1000; } PORTD = i; _delay_loop_2(T); } for(i = 128; i > 1; i -=i/2) { if( PINB && !(_BV(PINB6)) ) { T=30000; } if(PINB && !(_BV(PIN7)) ) { T=1000; } PORTD = i; _delay_loop_2(T); } } return 1; }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Arduino in luči (strani: 1 2 )Oddelek: Elektrotehnika in elektronika | 12054 (9680) | FX6300B |
» | Vprašanje v zvezi z rand() funkcijoOddelek: Programiranje | 5385 (4575) | fireice |
» | C strukture, kazalci naloga pomocOddelek: Programiranje | 1461 (1356) | DavidJ |
» | [C] random do poljubne številkeOddelek: Programiranje | 2151 (1818) | napsy |
» | interupti in merjenje frekvence v picuOddelek: Elektrotehnika in elektronika | 2185 (1941) | neoto |