.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQ
Hledat
Seznam uživatelů
Uživatelské skupiny
Registrace
Profil
Statistika
Soukromé zprávy
Přihlášení
 
Obsah fóra mcontrollers.com
->
AVR
Odeslat odpověď
Uživatel
Předmět
Tělo zprávy
Smajlíky (emotikony)
Zobrazit další smajlíky (emotikony)
Barva písma:
Výchozí
Kaštanová
Červená
Oranžová
Hnědá
Žlutá
Zelená
Olivová
Azurová
Modrá
Tmavě modrá
Fialová
Fuchsiová
Bílá
Černá
Velikost písma:
Velikost písma
Drobné
Malé
Výchozí
Velké
Obrovské
zavřít zn.
[quote="Radius"]Nedefinuju funkci. Definuju jeden bit v nejakem vstupne/vystupnim portu. Je to bit v bitovem poli. Podle me je jednodussi (prehlednejsi a mozna i rychlejsi) tohle: void NastavRele(void) { RELE_0=stavRele.R_0; RELE_1=stavRele.R_1; . . RELE_n=stavRele.R_n; } kde RELE_0 az RELE_n si nadefinujes jak jsem naznacil, nez to co jsi spachal Ty. To co definujes v tom poli struktur je dost neprehledne a nemuzes pristoupit k jednomu konkretnimu RELE primo ale zase pres nejakej software, kterej to slozi z tech hodnot v tom poli.[/quote]
Možnosti
HTML:
VYPNUTO
Značky
:
POVOLENY
Smajlíky:
POVOLENY
Zakázat značky v tomto příspěvku
Zakázat smajlíky v tomto příspěvku
Přílohy
·
Kliknutím na tlačítko
Připojit soubor
se otevře panel pro přidání nové souborové přílohy.
·
Kliknutím na tlačítko
Seznam příloh
se otevře seznam aktuálních příloh, které můžete mazat i upravovat.
·
Chcete-li přepsat některý ze souborů (třeba jeho novější verzí), klikněte na obě dvě tlačítka. Potom postupujte jako při přikládání nového souboru, jen nakonec neklikejte na tlačítko
Připojit soubor
, ale klikněte na tlačítko
Přepsat novější verzí
u stávajícího souboru, který chcete přepsat. Pokud se komentář nemění, není jej třeba znovu zadávat.
Možnosti
Anti SPAM system
Jste neregistrovaný uživatel!
Na kontrolní otázky musí odpovovídat pouze neregistrovaní uživatelé.
Tuto otázku musíte zadat k tomu, aby bylo posílání zpráv složitější (ochrana proti SPAM botům).
Pokud si nejste jistý odpovědí, kontaktujte prosím
administrátora v BUG reportu
, který vám rád pomůže.
Anti SPAM system:
Z jaké země pochází toto fórum? Odpověď jsou dvě slova. První začína na Č a druhé na r.
Vaše odpověď: *
Časy uváděny v GMT + 2 hodiny
Přejdi na:
Zvolte fórum
Fórum
----------------
Zprávy od moderátorů (vývěsní tabule)
Zprávy pro moderátory
Programování, software, mikrokontroléry, mikropočítače, mikroprocesory
----------------
Microchip
ARM
AVR
8051 / 8052
Jiné mikrokontroléry, procesory, hradla
Elektronika, hardware a programátory
----------------
Elektronika s mikrokontroléry, procesory
Elektronika bez mikrokontrolérů, procesorů
Programátory
Ostatní
----------------
Download
Ostatní
Off – topic
Přehled tématu
Autor
Zpráva
Šebi
Zaslal: 14 leden 2018, 22:31
Předmět:
S tou funkcí jsem to napsal blbě. Přehlednější a rychlejší to asi bude a co jsem pochitil v tom vlákně, tak ještě rychlejší by bylo asi jak psal Balů, ale složitější na psaní
kód:
if(stavRele.R_0 == 1) RELE_0 = 1; else RELE_0 = 0;
Něco zkusím a uvidím. Nicméně děkuji za rady a hlavně odkaz na to vlákno. Zase jsem se dozvěděl něco novýho, co mi hodně zjednoduší a hlavně zpřehlední jinou věcičku.
Radius
Zaslal: 11 leden 2018, 3:39
Předmět:
Nedefinuju funkci. Definuju jeden bit v nejakem vstupne/vystupnim portu. Je to bit v bitovem poli. Podle me je jednodussi (prehlednejsi a mozna i rychlejsi) tohle:
void NastavRele(void)
{
RELE_0=stavRele.R_0;
RELE_1=stavRele.R_1;
.
.
RELE_n=stavRele.R_n;
}
kde RELE_0 az RELE_n si nadefinujes jak jsem naznacil, nez to co jsi spachal Ty. To co definujes v tom poli struktur je dost neprehledne a nemuzes pristoupit k jednomu konkretnimu RELE primo ale zase pres nejakej software, kterej to slozi z tech hodnot v tom poli.
Šebi
Zaslal: 10 leden 2018, 23:07
Předmět:
Tak jsem zkusil sesmolit tu první variantu a po několikátém pokusu to překladač pobral jen s dvouma varováníma (1. missing braces around initializer [-Wmissing-braces] a 2. (near initialization for 'rele[0]') [-Wmissing-braces])
, ale podle simulátoru to funguje.
kód:
#include <avr/io.h>
typedef struct
{
volatile uint8_t *PORT;
volatile uint8_t *DDR;
volatile uint8_t *PIN_REG;
uint8_t PIN;
} device;
device rele[4] = {
&PORTA, &DDRA, &PINA, PINA0, // rele1
&PORTB, &DDRB, &PINB, PINB3, // rele2
&PORTA, &DDRA, &PINA, PINA5, // rele3
&PORTC, &DDRC, &PINC, PINC6, // rele4
};
int main(void)
{
uint8_t stavRele;
for (uint8_t t = 0; t < 4; t++)
{
*rele[t].DDR |= (1<<rele[t].PIN); // nastavení jako výstup
}
while(1)
{
for (uint8_t t = 0; t < 4; t++)
{
if (stavRele & (1<<t)) *rele[t].PORT |= (1<<rele[t].PIN); // nastavení nebo nulování rele podle bitu proměnné
else *rele[t].PORT &= ~(1<<rele[t].PIN);
}
stavRele = ~stavRele; // neguje obsah pro vyzkoušení
}
}
ale nejde mi do hlavy, jak jsi myslel tu druhou variantu. Co jsem pročítal to vlákno, tak tam si definuješ fci jednoho bitu, příp. pinu. To bych musel definovat fci pro každej pin a bit zvlášť. Ale potom bych asi nemohl pracovat se všemi vstupy (výstupy) z jedné funkce. Nebo teda alespoň nevím jak
Radius
Zaslal: 08 leden 2018, 0:15
Předmět:
I/O - port je bit v nějakém registru. Mužeš mít pole struktur a tak struktura bude složená z ukazatele na ten registr a číslo bitu v něm. Ale mnohem lepší by bylo přistupovat k I/O tak jak jsem to naznačil v tomto vlakně
http://forum.mcontrollers.com/viewtopic.php?p=28832&highlight=#28832
a přenést ty piny do své bitové struktury stylem MUJ_BIT_00=IO_00 atd.
Šebi
Zaslal: 07 leden 2018, 15:42
Předmět: Definování I/O portů v poli
Zdravím a už zase otravuji. Potřeboval bych poradit, zda lze definování I/O registrů nějak nacpat například do pole kvůli zjednodušení kódu. Například budu mít na výstupech plno relátek (nebo vstupů) rozházených různě po pinech mcu a ovládat (nebo číst stav) je budu třeba podle jednotlivých bitů v jedné proměnné např. typu int. Představoval jsem si to nějak takto, ale AvrStudio mi to nechce překousat.
kód:
uint8_t RELE_DEF[5][4] = {
&PORTA, &DDRA, &PINA, PINA0, // rele 1
&PORTB, &DDRB, &PINB, PINB1, // rele 2
&PORTA, &DDRA, &PINA, PINA2, // rele 3
&PORTD, &DDRD, &PIND, PIND0, // rele 4
&PORTA, &DDRA, &PINA, PINA4, // rele 5
};
nebo nějak přes sturktůru
kód:
typedef struct {#define PORT_REG; #define DDR_REG; #define PIN_REG; #define PIN;} device;
device RELE_DEF[5] = {
PORTA, DDRA, PINA, PINA0, // rele 1
PORTB, DDRB, PINB, PINB1, // rele 2
PORTA, DDRA, PINA, PINA2, // rele 3
PORTD, DDRD, PIND, PIND0, // rele 4
PORTA, DDRA, PINA, PINA4, // rele 5
};
Potom by stačilo pro inicializaci, čtení nebo nastavení bitu prohnat přes nějaký cyklus, např. for{}, který by používal prvky z pole.
kód:
for (uint8_t t = 0; t < 5; t++)
{
*RELE_DEF[t][1] |= (1<<RELE_DEF[t][3]) // nastavení jako výstup
// nebo RELE_DEF[t].DDR_REG |= (1<<RELE_DEF[t].PIN)
}
Dá se to nějak tak krásně sjednotit? Mě se to zatím nijak nepodařilo.
Num Lock Holder - app to hold Numlock
Copyright © 2018
Rudolf Veselý, mcontrollers.com
.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by
phpBB
© 2001, 2002 phpBB Group - with RedSquare
DoubleJ(Jan Jaap)