Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Pomoc s programem
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: čt únor 06 2020, 10:25    Předmět: Citovat

Když máš vloženou eeprom.h, tak použij metody z této knihovny. Viz zde. A nezapisoval bych během přerušení.

V programu pak:

kód:

uint8_t EEMEM byte_v_eeprom;

...

uint8_t byte_v_programu = eeprom_read_byte(&byte_v_eeprom);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zmije



Založen: Jun 30, 2005
Příspěvky: 1569
Bydliště: Pardubický kraj

PříspěvekZaslal: čt únor 06 2020, 22:11    Předmět: Citovat

FHonza má pravdu v tom, že operace, které můžou trvat dlouho, selhat, nebo potřebují přerušení by se v obsluze přerušení dělat neměly. V tomhle konrétním případě by to tolik vadit nemuselo, když se ta hodnota nastavuje málo kdy.

Nauč se formátovat kód, kdo to má pak přepisovat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
reher64



Založen: Jul 09, 2013
Příspěvky: 24

PříspěvekZaslal: čt únor 06 2020, 22:52    Předmět: Citovat

Dobře, to by snad neměl být problém přesunou.
Jak správně formátovat kód? Více méně vše co tu řešíme se učím, tak mne omluvte za chyby co dělám.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zmije



Založen: Jun 30, 2005
Příspěvky: 1569
Bydliště: Pardubický kraj

PříspěvekZaslal: čt únor 06 2020, 23:39    Předmět: Citovat

Stylů formátování existuje více, některé jazyky jako třeba Python, make to mají dané už v základu většina to má spíš na libovůli uživatele tak jako C, ale aby v tom nebyl tolik nepořádek a dalo se v tom vyznat vzniklo několik ustálených konvencí. Já jsem použil jedno z nich, které je až na několik vyjímek podobné Linux kernel stylu. Existují i další, každé má své výhody a nevýhody. Nemá moc smysl hádat se o tom které je to pravé, zlaté pravidlo říká, že se má dodržovat to ve kterém je napsaná vetšina existujícího kódu.

Nejlépe se to naučíš napodobováním.

https://cs.wikipedia.org/wiki/Programovac%C3%AD_konvence
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
reher64



Založen: Jul 09, 2013
Příspěvky: 24

PříspěvekZaslal: pá duben 17 2020, 11:58    Předmět: Citovat

Zdravím Vás páni programátoři.
Musím to tu oživit a poprosit vás o pomoc.
Vše co jsem řešil, se mi povedlo s Vaší pomocí dořešit. Na stole v aplikaci to chodilo přesně dle mích představ, super.
Neměl jsem teď vůbec čas, ale už jsem se dostal k zapojení a bohužel narazil na problém. Zjistil jsem že na vstupu místo logické 1 je frekvence o změně 1ms z o na 1 Předpokládal jsem že by to vadit nemělo, jelikož by měl procesor spustit výstup až po detekci spodní hrany po cca 240 ms impulz tam bude proměný ale cca těch 200- 400ms. Jenže procesor mi reaguje neustále na pwm a drží mi stále seplý výstupy.
Je nějaká možnost jak sledovat to pwm a až když přijde log 0 dlouhá od těch 200ms a delší tak spustit to sepnutí výstupu ?

kód:
/*
 * tripling attiny13.cpp
 *
 * Created: 18.1.2020 16:32:53
 * Author : Diagnostika Salač
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#define BULHAR_CONST 8


volatile unsigned int set_cas_docas;
volatile unsigned int blinkr_levy, blinkr_pravy;
volatile char blinkr_levy_spusten, blinkr_pravy_spusten;
uint8_t set_cas_eeprom, set_cas;


ISR(TIM0_OVF_vect) // obsluha preruseni
{

   
   if (!(PINB & ((1<<PB2) | (1<<PB4))))
    {
      set_cas_docas++;
      }
       else
    {
       if (set_cas_docas > BULHAR_CONST)
       {
         set_cas = set_cas_docas;
         eeprom_update_byte ((uint8_t *)(0), (uint8_t)(set_cas)) ;
         }
         
   set_cas_docas = 0;
      
   }
   
   
   if (!(PINB & (1<<PB3)))
    {
      if (!blinkr_pravy_spusten)
      {
         if (blinkr_pravy++ > BULHAR_CONST)
          {
            blinkr_pravy = set_cas_eeprom;
            blinkr_pravy_spusten = 1;
            PORTB |= (1<<PB1);
            blinkr_levy_spusten = 0;
         }
      }
      } else if (!blinkr_pravy)
       {
      blinkr_pravy_spusten = 0;
   }
   if (blinkr_pravy > 0 && blinkr_pravy_spusten)
    {
      blinkr_pravy--;
      }
       else
       {
      PORTB &= ~(1<<PB1);
   }
   
   
   
   if (!(PINB & (1<<PB4)))
   {
      if (!blinkr_levy_spusten)
      {
         if (blinkr_levy++ > BULHAR_CONST)
          {
            blinkr_levy = set_cas_eeprom;
            blinkr_levy_spusten = 1;
            PORTB |= (1<<PB0);
            blinkr_pravy_spusten = 0;
         }
      }
      }
      else if (!blinkr_levy)
       {
      blinkr_levy_spusten = 0;
   }
   if (blinkr_levy > 0 && blinkr_levy_spusten)
    {
      blinkr_levy--;
      }
       else
       {
      PORTB &= ~(1<<PB0);
   }
}




int main(void)
{
   
   set_cas_eeprom = eeprom_read_byte ((uint8_t)(0));
   
   DDRB &= ~(1<<PB2); // vstup set času
   DDRB &= ~(1<<PB3); // vstup pravý blinkr
   DDRB &= ~(1<<PB4); // vstup levý blinkr

   PORTB |= (1<<PB2) |(1<<PB3)|(1<<PB4); //zapnutí pull up rezistorů

   DDRB |= (1<<PB0); // výstup levý blinkr
   DDRB |= (1<<PB1); // výstup pravý blinkr
   
   
   TCCR0B |= _BV(CS02); // nastaveni preddelicky na 1024 (CLK=fosc/1024/256 = [Hz], 1 / CLK = [s])
   
   TIMSK0 |= _BV(TOIE0); // zapni preruseni: Timer Overflow interrupt
   
   
   set_cas_docas = 0; // nastaveni globalnich promenych
   set_cas = 0;
   blinkr_levy = 0;
   blinkr_pravy = 0;

   
   sei(); // globalni povoleni preruseni

   while (1);
}
[size=7][/code]


image0.jpeg
 Komentář:
délka spouštěcího signálu
 Velikost:  108.17 kB
 Zobrazeno:  119 krát

image0.jpeg



image1.jpeg
 Komentář:
frekvence na vstup
 Velikost:  114.88 kB
 Zobrazeno:  131 krát

image1.jpeg


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4507
Bydliště: Košice

PříspěvekZaslal: pá květen 01 2020, 7:48    Předmět: Citovat

Co tak dat Rc clen na vstup.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund