Hledá se pomocník ke zhotovení přístroje pro lucidní sny

Jestliže poptáváte nebo hledáte osobu(y) k vyřešení nějakého problému, popř. nabízíte SERIÓZNÍ zaměstnání související s elektronikou.

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 01:00
Bydliště: Kladno

#16 Příspěvek od frantajetel11 »

Vůbec teda nechápu přínos tohohle zařízení, ale když už bych měl spát s něčím takovým na ksichtě a mít z toho vedenej 5ti žílovej kabel tak :
1) ta navrhovaná CR 2032 ti moc dlouho nevydrží, kór u vysocesvítivejch ledek - dej tam malej síťovej zdroj
2) čtyřma výstupama uP uděláš 16 úrovní blikání ledky i bez pwm - to je málo?
3) ať počítám jak chci, tak společná zem, + ledek (pokud teda blikaj vždycky zároveň) a tlačítko jsou furt jen 3 žíly - proč 5?

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#17 Příspěvek od Alex005 »

Pokud by ta cr2032 nevydržela tak bych to napájel přes usb = 5V. Nevím přesně co je uP, ale 16 úrovní je určitě dostatek. A těch 5 kabelů. Dva jsou pro tlačítko, dva pro anody LED diod a jeden pro společnou katodu = 5 žil.

Ono by samozřejmě šlo dát anody na jeden kabel a dlačítko hodit na vývod ke katodám LED diod. Ještě jsem to tolik nezkoumal. 5 žil mám teď u masky kterou ženu přes RS232.

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#18 Příspěvek od Alex005 »

Zdravím všechny,

zkoušel jsem projít nějaké stránky a kouknout do datasheetu k ATTINY2313, ale jsem z toho hodně zmatený. Mám nainstalovaný PonyProg a AT Studio. Co vše mám nastavit aby jednočip po spuštění tikal na vnitřním krystal který by měl být 8MHz (prá je to nějaká propojka u Fuse Low Bite). Když pak budu chtít aby jednočip odpočítával třeba 4 hodiny (14400 sekund = 14400000000 mikro-sekund) tak udělám cykl o jedné instrukci který se zopakuje 14400000000krát ? ... a nebo bych mohl použít Watchdog? Mám to chápat jako Timer v Delphi? Nastavím čas a spustím, po jeho odpočtu se provede instrukce (třeba JUMP někam)? Jinak 8MHz = 1 procesorový tik = 1uS ? ...

Jak mám začít první řádek? Má mít ATTINY na začátku nějakou startovací instrukci? A to PWM? ... z toho jsem totálně mimo. :(

Díky moc za pomoc.

Toto jsem přidal dodatečně - kód jak by to mohlo být ale ve vyšším jazyce (aby se nikdo nemusel namáhat s logikou, tak jsem to takto načrtnul):

// zapnutí ON / OFF přepínače do polohy ON
START PROGRAMU
A=0 // proměná alarm 1
B=0 // proměná alarm 2
Tlacitko1=1 // nastavení log. 1 na tlačítku
Tlacitko2=1 // nastavení log. 1 na tlačítku
Tlacitko3=1 // nastavení log. 1 na tlačítku
VystupLED1=0 // zhasnutí LED diody č.1
VystupLED2=0 // zhasnutí LED diody č.2
JasLED=0 // nejmenší jas LED diod
tlacitko3 nastavit na preruseni

cykl1:
if tlacitko1=0 then
A=A+1
VystupLED1=1 // rozsvícení LED diody č. 1
VystupLED2=1 // rozsvícení LED diody č. 2
cekej 200 ms
VystupLED1=0 // zhasnutí LED diody č. 1
VystupLED2=0 // zhasnutí LED diody č. 1
if tlacitko2=1 then goto cykl1

cykl2:
if tlacitko1=0 then
B=B+1
VystupLED1=1 // rozsvícení LED diody č. 2
VystupLED2=1 // rozsvícení LED diody č. 2
cekej 100 ms
VystupLED1=0 // zhasnutí LED diody č. 1
VystupLED2=0 // zhasnutí LED diody č. 1
if tlacitko2=1 then goto cykl2

Timer=A*3600000 // počet hodin * 3600000 milisekund

Timer.start=1 // spuštění odpočtu alarmu

Timer.Crrr: // sem skočí když timer odpočítá vše do nuly
cekej 2000 ms
JasLED=JasLED+1 // nastavení jasu LED diod
PWM=JasLED // nastavení PWM na požadovaný jas LED diod
VystupLED1=1 // rozsvícení LED diody č. 1
VystupLED2=1 // rozsvícení LED diody č. 2
cekej 200 ms
VystupLED1=0 // zhasnutí LED diody č. 1
VystupLED2=0 // zhasnutí LED diody č. 2
goto Timer.Crrr

Preruseni: // sem skočí když se stiskne tlačítko č.3
if Timer.start=1 then return // pokud timer stále počítá (zamezení stisknutí tlačítka dřív než dopočítá čas)
VystupLED1=0 // zhasnutí LED diody č. 1
VystupLED2=0 // zhasnutí LED diody č. 2
JasLED=0 // jas LED diod opět na nejmenší hosnotu
Timer=B*60000 // počet minut * 60000 milisekund
Timer.start=1 // spuštění odpočtu alarmu


... řekl bych že to je asi vše :)
Naposledy upravil(a) Alex005 dne 09 říj 2010, 20:37, celkem upraveno 2 x.

Uživatelský avatar
Burajko
Příspěvky: 1803
Registrován: 21 srp 2009, 02:00

#19 Příspěvek od Burajko »

1.Casovanie sa robi povacsinou cez Timer z preddelickou a to tak,ze nastavis pretecenie napr. kazdych 10ms,ktore obsluzis v preruseni,alebo softwarove kontrolujes priznak pretecenia.
2.Urob delay ruinu,ktora ma napr 1s. a 14400 ju opakuj.
Už druhý krát strihám a furt je to krátke

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#20 Příspěvek od Andrea »

Alex005 píše:Jinak 8MHz = 1 procesorový tik = 1uS ? ...
Při 8MHz je hodinový cyklus 125ns a instrukce trvají 1-4 hodinové cykly.

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#21 Příspěvek od Alex005 »

Děkuji za odpověď ... mohu si tak udělat obrázek kolik cyklů a tak.

Jinak právě stahuji BASCOM, kde se programuje v qbasicu. V tom to bude lepší. Pokud jej někdo ovládá a mohl by mi poradit do začátku?

Díky.

Uživatelský avatar
Crifodo
Příspěvky: 14471
Registrován: 11 říj 2005, 02:00

#22 Příspěvek od Crifodo »

Alex005 píše:právě stahuji BASCOM, kde se programuje v qbasicu
to je asi tak pravda jako že Poláci mluví slovensky.
Bascom má pro pauzy příkaz wait, waitms a waitus (s, ms, µs).

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#23 Příspěvek od Alex005 »

Crifodo ... mno mě to skoro přišlo jako qbasic. Mimoto když už jsi nakousnul pár příkazů tak asi s tím máš nějakou zkušenost ... co tedy dál?

Zatím mám toto:
**************

$regfile = "attiny2313.dat"
$crystal = 8000000 // interní 8MHz krystal

Config Portb.3 = Output // jeden výstup na jedu LED
Config Portb.4 = Output // druhý výstup na druhou LED
Config Portd.4 = Input // tlačítko č.1
Config Portd.5 = Input // tlačítko č.2
Config Portd.6 = Input // tlačítko č.3
Portb.3 = 1 // napájení LED č.1
Portb.4 = 1 // napájení LED č.2
Portd.4 = 1 // nastavení tlačítka č.1
Portd.5 = 1 // nastavení tlačítka č.2
Portd.6 = 1 // nastavení tlačítka č.3

Dim A As Integer // proměnná pro alarm 1
Dim B As Integer // proměnná pro alarm 2
Dim C As Integer // pomocná proměnná pro jas LED diod
Dim F As Byte // pomocná proměnná pro cykl
Let A = 0 // nastavení alarmu 1 na 0
Let B = 0 // nastavení alarmu 2 na 0
Let C = 0 // nastavení pomocné proměnné pro jas LEDek

// nastavim dva timery tak aby 0 = 0% a 255 = 100% jas LED diod
Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Enable Timer0
Enable Timer1
Start Timer0
Start Timer1

Led1 alias Ocr1bl // to nevim co je
Led2 alias Ocr1al // to nevim co je
Led1 = 0 // zhasnutí LED č.1
Led2 = 0 // zhasnutí LED č.2

// nastavení alarmu 1 (hodiny)
Do
if Portd.4 = 0 then
A = A + 1
Led1 = 255
Led2 = 255
Waitms 500
Led1 = 0
Led2 = 0
Waitms 500
end if
if Portd.5 = 0 then goto AlarmDva
Loop

// nastavení alarmu 2 (minuty)
AlarmDva:
Do
if Portd.4 = 0 then
B = B + 1
Led1 = 255
Led2 = 255
Waitms 500
Led1 = 0
Led2 = 0
Waitms 500
end if
if Portd.5 = 0 then goto Start
Loop

// odpočítání alarmu č.1
Start:
A = A * 3600 // počet hodin v sekundách (alarm 1)
B = B * 60 // počet minut v sekundách (alarm 2)
Wait A // čekej požadovanou dobu

// blikací cyklus
Cykl:
Do
Led1 = 0 // zhasnutí LED č.1
Led2 = 0 // zhasnutí LED č.2
For F = 1 To 20 // cyklus, který se provede 20x (20x 100ms = 2 sec)
Waitms 100 // počkej dvěstě milisekund
if Portd.6 = 0 then goto Preruseni // obsluha tlačítka na masce
Next F
If C < 255 then C = C + 1 // zvětšení jasu LED diod
Led1 = C
Led2 = C
For F = 1 To 5 // zpoždovací cyklus (jak dlouho mají LEDky svítit)
Waitms 100
if Portd.6 = 0 then goto Preruseni
Next F
Loop

Preruseni:
Led1 = 0 // zhasnutí LED č.1
Led2 = 0 // zhasnutí LED č.2
C = 0 // reset pomocné proměnné pro jas LEDek
Wait B // čekej požadovounou dobu (alarm 2)
goto Cykl

End

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#24 Příspěvek od Alex005 »

Bohužel se mi ještě nikdo ke kódu nevyjádřil tak ještě přidávám schéma zapojení ... prosil bych o kontrolu zda-li jej mohu takto spájet.

Děkuji.
Přílohy
schmmm.png
(15.43 KiB) Staženo 117 x

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#25 Příspěvek od Alex005 »

Tak už vše funguje. Přikládám funční kód a schéma zapojené pro případě že by si to někdo chtěl postavit.

Kód: Vybrat vše

' ***********
' LDI COUNTER

$regfile = "attiny2313.dat"
$crystal = 1000000                                          ' Internal 8Mhz crystal

Config Portb.3 = Output                                     ' first LED
Config Portb.4 = Output                                     ' second LED
Config Portd.4 = Input                                      ' button 1
Config Portd.5 = Input                                      ' button 2
Config Portd.6 = Input                                      ' button 3

Portb.3 = 1                                                 ' power for LED 1
Portb.4 = 1                                                 ' power for LED 2
Portd.4 = 1                                                 ' button 1 set to 1
Portd.5 = 1                                                 ' button 2 set to 1
Portd.6 = 1                                                 ' button 3 set to 1

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim F As Byte

Let A = 0
Let B = 0
Let C = 0

' ***********************************************************
' Timer for each LED with 0 = 0% and 255 = 100% of brightness

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Enable Timer1
Start Timer1
Led1 Alias Ocr1bl
Led2 Alias Ocr1al
Led1 = 0                                                    ' turn off LED 1
Led2 = 0                                                    ' turn off LED 2

' ********************************
' setup first countdown (in hours)

Alarmone:

  If Pind.4 = 0 Then
    A = A + 1                                               ' number of hours
    Led1 = 255
    Led2 = 255
    Waitms 500
    Led1 = 0
    Led2 = 0
    Waitms 250
  End If
  If Pind.5 = 0 Then
    Waitms 500                                              ' wait for avoid double-push
    Goto Alarmtwo
  End If
  Goto Alarmone

' ***********************************
' setup second countdown (in minutes)

Alarmtwo:

  If Pind.4 = 0 Then
    B = B + 1                                               ' number of minutes
    Led1 = 255
    Led2 = 255
    Waitms 500
    Led1 = 0
    Led2 = 0
    Waitms 250
  End If
  If Pind.5 = 0 Then Goto StartCountdown
  Goto Alarmtwo

' ***********************************************************
' converting variables into seconds and start first countdown

Startcountdown:

  A = A * 3600                                              ' first countdown in seconds
  B = B * 60                                                ' second countdown in seconds
  If A = 0 Then Goto Cycle
  Wait A                                                    ' wait first countdown

' **********************************************
' LED flashing + responding on pressing button 3

Cycle:

  Led1 = 0                                                  ' turn off LED 1
  Led2 = 0                                                  ' turn off LED 2
  For F = 1 To 10                                           ' wait (10x 100ms = 1 sec)
    Waitms 100
    If Pind.6 = 0 Then Goto Preruseni                       ' if button 3 pressed than jump
  Next F
  If C < 255 Then C = C + 1                                 ' increase LED brightness each cycle into max
  Led1 = C
  Led2 = C
  For F = 1 To 2                                            ' How long may LED be ON (200ms)
    Waitms 100
    If Pind.6 = 0 Then Goto Preruseni
  Next F
  Goto Cycle

' *****************************
' code when user press button 3

Preruseni:

  Led1 = 0                                                  ' turn off LED 1
  Led2 = 0                                                  ' turn off LED 2
  C = 0                                                     ' reset variable with last brightness of LEDs to zero
  If B = 0 Then Goto Cycle
  Wait B                                                    ' start second countdown
  Goto Cycle

End
Přílohy
schmmm.png
(19.98 KiB) Staženo 115 x
Naposledy upravil(a) Alex005 dne 14 říj 2010, 11:59, celkem upraveno 1 x.

Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 01:00
Bydliště: Kladno

#26 Příspěvek od frantajetel11 »

Hmm tak na tomhle schématu jsi nějak zapoměl propojenou zem uP s napájením :? To asi moc fungovat nebude...
Ten program sice moc nepobírám, ale jestli se nepletu, tak ty diody prakticky vždycky blikaj zároveň? Tak nechápu, proč je nemáš na jeden výstup. A jestli jsou tam vysocesvítivý, jak jsi psal vejš, proč jsou přímo na výstupu a ne přes tranzistor? Nebude ten procák přetíženej?

Uživatelský avatar
Alex005
Příspěvky: 63
Registrován: 22 zář 2010, 02:00

#27 Příspěvek od Alex005 »

Ahh ano, ten kondenzátor tam byl špatně. Opravil jsem to a uploadnul namísto špatného. Takto to mám složené a funguje to. Ty vysokosvítivé diody mají 3V/20mA (svítivost 20000mCd) takže jsou napřímo.

Odpovědět

Zpět na „Poptávka služeb, nabídky zaměstnání“