Založen: Nov 13, 2008 Příspěvky: 1922 Bydliště: Kladno
Zaslal: pá říjen 08 2010, 21:59 Předmět:
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?
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.
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 Alex005 dne so říjen 09 2010, 19:37, celkově upraveno 2 krát.
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
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
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
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
Založen: Nov 13, 2008 Příspěvky: 1922 Bydliště: Kladno
Zaslal: čt říjen 14 2010, 10:10 Předmět:
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?
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.
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2
Strana 2 z 2
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
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.