Divný běh programu

Tak jsem po delší době jsem začal s programem pro testovací přípravek, kde chci zkoušet různé věci ohledně funkčnosti řízení pro mojí ledkovou supersvítilnu. Pořád tam bylo něco divně, ač program v principu chodil. Nakonec jsem udělal testovací program, použíl jednoduchý led baragraf a nestačil se divit.

Používám Bascom a klon Arduina nano. Problém spočívá v tom, že mě přijde, že příkaz waitms nezpůsobí čekání programu, ale mě neznámým způsobem jen přeskočí následující příkaz (zhasni ledku), program běží dál a zhasne ji až za nastavený čas. Takže místo toho, aby svítila vždy jedna ledka, tak se postupně rozsvítí celá řada a ta pak zas postupně zhasně. Správně by to mělo být “běhající” světlo. Kapacity, jenž by mohly zdržovat zhasínání ledek tam nemám a tak mě nenapadá, proč to funguje, jak to funguje. Hodil jsem i video na youtube, jak to (ne)funguje. Zkoušel jsem zapojit gnd baragrafu jinam, ale nemělo to žádný vliv. Napájím to přes programátor AVRPROG USB v2.

[code]$regfile = “m328pdef.dat”
$crystal = 16000000
$hwstack = 64
$swstack = 40
$framesize = 40
$baud = 19200

'Definice Pinů

Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output

’ Aliasy pinů
Led1 Alias Pinb.1
Led2 Alias Pinb.0
Led3 Alias Pind.7
Led4 Alias Pind.6
Led5 Alias Pind.5
Led6 Alias Pind.3

Do
’ Vypni všechny led
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0

'Sepni led a vypni předchozí a pak počkej
  Waitms 50
Led1 = 1
  Waitms 50
Led1 = 0
Led2 = 1
  Waitms 50
Led2 = 0
Led3 = 1
  Waitms 50
Led3 = 0
Led4 = 1
  Waitms 50
Led4 = 0
Led5 = 1
  Waitms 100
Led5 = 0
Led6 = 1
  Waitms 200

Loop[/code]

Čteme z registru PINx, zapisujeme do registru PORTx.

Má být

Led1 Alias Portb.1 Led2 Alias Portb.0 atd

Děkuju za “nakopnutí”. Opravím to a dám vědět. Už jsem to delší dobu nedělal a tak jsem udělal tuhle školáckou chybu.

Edit: Díky, funguje. Je mě záhadou, že tak nějak to fungovalo i před tím.

Tak jsem si pohrál s baragrafem a tady je výsledek. Není to nic světabornýho. Jen takový blbnutí. :stuck_out_tongue:

Fungovalo to, protože zápisem log. 1 na PINx invertuješ příslušný PORTx. Log. 0 nic nezmění.
Neumí to asi jen řada ATmega8, 16, 32, 64, 128, 256. Ostatní ATmegy i ATtiny to umí.