Hledá se pomocník ke zhotovení přístroje pro lucidní sny
Moderátor: Moderátoři
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 01:00
- Bydliště: Kladno
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?
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?
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.
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.
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.![Sad :(](./images/smilies/icon_sad.gif)
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![Smile :)](./images/smilies/icon_smile.gif)
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.
![Sad :(](./images/smilies/icon_sad.gif)
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
![Smile :)](./images/smilies/icon_smile.gif)
Naposledy upravil(a) Alex005 dne 09 říj 2010, 20:37, celkem upraveno 2 x.
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
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
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.
Děkuji.
- Přílohy
-
- schmmm.png
- (15.43 KiB) Staženo 117 x
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.
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 01:00
- Bydliště: Kladno
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?
![Confused :?](./images/smilies/icon_confused.gif)
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?