|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 11 11, 13:18. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Programavimas » Programa mikro kontroleriui ATTINY2313
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
Programa mikro kontroleriui ATTINY2313 |
Parašytas: 2019 09 20, 18:55 |
|
|
|
Sveiki.
Kreipiuosi į Jus pagalbos, nes iš manęs programuotojas nekoks.
Tarkim situacija tokia, yra mikrokontroleris Attiny2313 du gerkonai ir trys relės. Gal kas galėtų patarti ar parašyti programa, kad:
1) Suveikus pirmam gerkonui - suveikia relė Nr.1.
2) Suveikus antram gerkonui - suveikia relė Nr.2.
3) Suveikus pirmam ir antram gerkonams - suveikia relė Nr.3.
Aš su CodeVisionAVR Evaluation pirma ir antra punktus man gaunas kažkas panašaus, bet trečio punkto niekaip neišmastau koki cikla panaudoti ar dar ką?. Vienu žodžiu bėda tokia |
|
|
|
|
|
|
Programa mikro kontroleriui ATTINY2313 |
Parašytas: 2019 09 20, 19:26 |
|
|
|
pasikoreguoji bitus ir teisingai nusistatai portus
Kodas: |
uint8_t state = 0;
// pasiziurime kokie sudirbo gerkonai (aktyvus 0, t.y. trumpinimas i GND)
if (!(PINB & (1 << PB1))) { state |= 1; }
if (!(PINB & (1 << PB2))) { state |= 2; }
// isejimu logika
switch (state) {
case 1: // suveikes tik 1 gerkonas
PORTB &= ~((1 << PB4) | (1 << PB5)); // isjungiame 2, 3
PORTB |= (1 << PB3); // ijungiame 1 rele
break;
case 2: // suveikes tik 2 gerkonas
PORTB &= ~((1 << PB3) | (1 << PB5)); // isjungiame 1, 3
PORTB |= (1 << PB4); // ijungiame 2 rele
break;
case 3: // suveike abu gerkonai
PORTB &= ~((1 << PB3) | (1 << PB4)); // isjungiame 1, 2
PORTB |= (1 << PB5); // ijungiame 3 rele
break;
default: // isjungiame visas
PORTB &= ~((1 << PB3) | (1 << PB4) | (1 << PB5));
break;
}
|
P.S. gali buti smulkiu sintakses klaidu, nes netikrinau |
|
|
|
|
|
|
Programa mikro kontroleriui ATTINY2313 |
Parašytas: 2019 09 23, 12:28 |
|
|
|
Algi viskas gerai, aš pagal pirma tavo varijanta dariau viskas veikai kaip priklauso. Aš pats su bitais prigrybavau, nuo žioplumo vaistų nėra, tai pradžiai ir nesigavo.
Ačiū Algi už pagalbą. |
|
|
|
|
|
|
Programa mikro kontroleriui ATTINY2313 |
Parašytas: 2019 09 23, 12:48 |
|
|
|
AlgisL rašo: |
Kaip jau minejau, as GCC gerbejas, tad IAR gali prie ko nors prisiknisti
pvz, truks interrupts includo...
GCC turi patogu ATOMIC_BLOCK, o kaip ten IAR, reikia googlinti.
Kodas: |
#include <tiny2313.h>
#include <delay.h>
#define IN_PINS PIND
#define PIN1 ( 1 << 0 )
#define PIN2 ( 1 << 1 )
#define OUT_PORT PORTB
#define RELE1 0bxxxxxxxx // susidek bitus
#define RELE2 0bxxxxxxxx // bet tik ten kur
#define RELE3 0bxxxxxxxx // reliu / LED valdymas
#define R_OFF ~( RELE1 | RELE2 | RELE3 )
void main( void ) {
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); // == 0
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port A initialization
//DDRA=(0<<DDA2) | (0<<DDA1) | (0<<DDA0); == 0
//PORTA=(0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); == 0
DDRA = 0b00000000;
PORTA = 0b11111111; // nepatariu palikti ore pakabintu bitu
// Port B initialization
DDRB = 0b01111111;
PORTB = 0b10000000; // nepatariu palikti ore pakabintu bitu
// Port D initialization
DDRD = 0b00000000;
PORTD = 0b11111111; // nepatariu palikti ore pakabintu bitu
while ( 1 ) {
uint8_t n = 0, state = 0, tmp = 0;
// iejimuose 100 us turi issilaikyti stabilus "0"
while ( ++n != 100 ) { delay_us( 1 ); tmp |= IN_PINS; }
// sukombinuojame iejimo bitus i [0..3] indeksa
// tavo atveju nebutina, nes pasirinkti 1-as ir 0-is bitai, bet nemaiso...
if ( !( tmp & PIN1 ) ) { state |= 1; }
if ( !( tmp & PIN2 ) ) { state |= 2; }
// pats reliu i(s)junginejimas
switch (state) {
case 1: {
__disable_interrupts(); // geriau, kai isvedimas buna atomarine procedura
OUT_PORT = ( OUT_PORT & R_OFF ) | RELE1;
__enable_interrupts();
delay_ms( 500 );
} break;
case 2: {
__disable_interrupts(); // geriau, kai isvedimas buna atomarine procedura
OUT_PORT = ( OUT_PORT & R_OFF ) | RELE2;
__enable_interrupts();
delay_ms( 250 );
} break;
case 3: {
__disable_interrupts(); // geriau, kai isvedimas buna atomarine procedura
OUT_PORT = ( OUT_PORT & R_OFF ) | RELE3;
__enable_interrupts();
delay_ms( 250 );
} break;
default: {
__disable_interrupts(); // geriau, kai isvedimas buna atomarine procedura
OUT_PORT &= R_OFF;
__enable_interrupts();
} break;
} // switch
} // while
} // main
|
as ir prigrybavau su portais |
|
|
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods |
|
|
|