Anonymní profil Jirka – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jirka – Programujte.comAnonymní profil Jirka – Programujte.com

 

Příspěvky odeslané z IP adresy 80.251.250.–

Jirka
Python › Odeslani dat pres tlacitko n…
9. 10. 2017   #218092

Ahoj. Chtěl bych se zeptat, využívám wx a jednoduchou grafiku. Mám dvě tlačítka a někončenou smyčku.

A chtěl bych, když kliknu na tlačítko, tak aby se mi odeslal data po sériovce pryč. Ale problém je ten, že data odejdou, ale program se mi kousne. Ale mě se nedaří tento problém odstranit. Tak třeba mi někdo poradí.

Program nedělá nic jiného, než že vytvoří okno, kde jsou dvě tlačítka. V nekonečné smyčce se čtou data ze síriovky, a po stisku tlačítka chci odeslat data pryč a pokračovat dál. Díky moc

#!python
# -*- coding: utf-8 -*-

from visual import *
from visual.controls import *
from visual.graph import *
import wx
import serial
import string
import math
import sys
from time import time
import numpy as np
import config


# Navaz spojeni, jinak nahlas chybu
try:
   ser = serial.Serial(port='COM10',baudrate=115200, parity=serial.PARITY_NONE, stopbits=1, timeout=None)
   ser.write("AHOJ")
except:
   print "ERROR"

#tlacitko pro odeslani initu
def sendInit(evt):
   try:
      ser.write("NEEEE")
   except:
      print "navaz spojeni blbe"
   print "odeslano"

#tlacitko pro opetovne navazani
def connect(evt):
   try:
      ser = serial.Serial(port='COM10',baudrate=115200, parity=serial.PARITY_NONE, stopbits=1, timeout=None)
      ser.write("Stisknuto")
   except:
      print "HOUSTNE mame problem"
   print "odeslano"

#vytvoreni panelu s tlacitky
w = window(width=480, height=320, menus=False, title='Controls', x = 10, y = 650,style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
p = w.panel
#definice tlacitek
#   Init tlacitko
Init = wx.Button(p, label='Send Init', pos=(10,10))
Init.Bind(wx.EVT_BUTTON, sendInit)
#   Reconnect tlacitko
ReConnect = wx.Button(p, label='Re-connect', pos=(10,40))
ReConnect.Bind(wx.EVT_BUTTON, connect)

#nekonecnik
while 1:
   try:
      s=ser.read(6)
      ss=np.fromstring(s, dtype=np.int8, count=6)
      A1=ss[0]
      A2=ss[1]
      A3=ss[2]
      A4=ss[3]
      A5=ss[4]
      A6=ss[5]
   except:
      print "data nechodi"

   print A1
   print A2
   print A3
   print A4
   print A5
   print A6
   
   rate(20)
ser.close
KlokanJa
Mikrokontroléry › Nastavení PWM - ATmega328
18. 8. 2017   #217552

#9 KIIV
Nic prdím na to.   

Udělám to takto. Na výstupu mám buffer, takže budu generovat pomocí TIMER1 PWM na pinu OC1A nebo OC1B, teď přesně nevím. 

Pomocí toho timeru bych měl být schopen generovat PWM od 1HZ do 100Hz se změnou střídy. A toto PWM potom pomocí páječky, cínu a drátků rozvedu do toho bufferu a ono ejhle, měl bych mít všude stejné průběhy. ;)

Takže teď už jenom vědět, že pomocí TIMERu1 budu schopen generovat toto:

1. Frekvence 1 - 100Hz

2. Změna střídy 0 - 100%

KlokanJa
Mikrokontroléry › Nastavení PWM - ATmega328
18. 8. 2017   #217549

No problém je, že HW je už vyroben. A já potřebuju generovat 4 stejné průběhy na 4 různých pinech. A ty piny jsou:

OC0A, OC0B, OC1A, OC1B nevím, jestli timerem 1 v PWM režimu můžu nastavit všechny 4 piny.

KlokanJa
Mikrokontroléry › Nastavení PWM - ATmega328
18. 8. 2017   #217547

#5 KIIV
Jo jako tak, že bych si přímo pomocí TIMERu1 generoval přerušení dané frekvence (vhodnou změnou registrů) a střídu už jenom pomocí IFu donastavit přímo v timeru. To je ještě lepší řešení, než mé, kde jsem chtěl mít přesně dané přerušení s frekvencí 10kHz.

A takto bych mohl docílit mnohem lepší přesnosti a procesor bude mít ještě dostatek času na to, aby se třeba dloubal v nose (LCD, Sériovka, .....).

KlokanJa
Mikrokontroléry › Nastavení PWM - ATmega328
18. 8. 2017   #217545

#3 KlokanJa
A ještě dodám. Mám generovat pulzy od 1Hz do 100Hz s proměnlivou střídou.

Takže nyní přemýšlím nad tím ,že bych si nastavil TIMER minimálně na 1kHz. A zde bych počítal pulzy. Např. pro frekvenci 35Hz, bych musel napočítat. Čím větší frekvence, tím lepší. Ale s rozumem, např. 10kHz. :D

Potom bych věděl, že pro 1 periodu signálu (o 35Hz) musím napočítat 28 pulzů. Tímto bych měl frekvenci 35Hz obdélník. A střída by do toho už měla jít taky. 

Takže kontrolní otázka, je to správná cesta, jakou se vydat?

KlokanJa
Mikrokontroléry › Nastavení PWM - ATmega328
18. 8. 2017   #217543

jj. Nakonec jsem to našel. :D

Takže buď to jít na to skrze soft-PWM, nebo použít TIMER1. Tam by to už mělo jít, nastavit frekvenci i střídu.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý