E4GGG


    В потёмках Истории, в сумраке ночи иду я на ощупь,
    всему удивляюсь, иду спотыкаюсь, и странно мне очень.
    Я шляпу беру -- оказалась лягушка.
    Жену обнимаю -- а это подушка.
    Погладил кота -- оказался утюг.
    Окно открываю -- и чувствую вдруг,
    что сырость чулана в лицо мне струится.
    Я за чернильницу принял мокрицу,
    почтовый ящик -- за мусорный ящик,
    свисток паровоза -- за птичьи трели,
    гудок машины -- за умное слово,
    плач принял за смех,
    тьму принял за свет,
    смерть принял за жизнь,
    а себя -- за другого.
    Метаморфозы!

    Странные игры - Метаморфозы

      http://i66.ltalk.ru/20/28/182820/60/6298560/17Metamorphoses.mp3


МикроFAQ по микроконтроллерам
-----------------------------

Q: Зачем изучать Java (примеры с Брдуино)?

A: Java, как песочница для C. C хорошо приспособлен для программирования микроконтроллеров.

Q: Зачем в курсе микропроцессоров использовать Logisim?

A: Например, как калькулятор для расчета комбинационных схем. Возьмем КС на 12 входов и 12 выходов с таблицей истинности ( (8 + 8) x 4096 ), имеющей don't сare выходы в половине случаев, элементный базис -- штрих Шеффера. Сколько времени займет расчет и оптимизация такой схемы вручную?.. Созданную и отлаженную в симуляторе схему переносим в Siemens Logo (v.6, v.7, Simatic 7..)


Несколько примеров для AT2313/STK500
------------------------------------

Задача 1. Мигающий байт
-----------------------

leds.prj

.MICRO "AT90S2313"
.TOOLCHAIN "GCC"
.GCCPATH   "C:\WinAVR"
.GCCMAKE   AUTO
.TARGET    "my_idea.hex"
.SOURCE    "my_idea.c"

.TRACE              ; Activate micro trace

; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.POWER VDD=5 VSS=0  ; Power nodes
.CLOCK 1meg         ; Micro clock
.STORE 250m         ; Trace (micro+signals) storage time

; Micro nodes: RESET, PB0-PB7, PD0-PD5, ACO, TIM1OVF
; Define here the hardware around the micro
; ------------------------------------------------------------

D1 VDD PB0  ; x: Panel LEDs 1 - 8
D2 VDD PB1  ; x: Panel LEDs 1 - 8
D3 VDD PB2  ; x: Panel LEDs 1 - 8
D4 VDD PB3  ; x: Panel LEDs 1 - 8
D5 VDD PB4  ; x: Panel LEDs 1 - 8
D6 VDD PB5  ; x: Panel LEDs 1 - 8
D7 VDD PB6  ; x: Panel LEDs 1 - 8
D8 VDD PB7  ; x: Panel LEDs 1 - 8

leds.c

#include <avr\io.h>              // Most basic include files
#include <util\delay.h>          // here

int main(void) {
    DDRB = 0xff;
    PORTB = 0;
   _delay_ms(1);
   while(1) {             // Infinite loop; define here the
     PORTB = ~PORTB;      // system behaviour
     _delay_ms(1000);
   }
   return 0;
}

В симуляторе код не запускается. Попробуем решить вопрос с помощью поиска в Интернете:

  http://www.amctools.com/cgi-bin/yabb2/YaBB.pl?num=1258178145

i got a MEM read warning...
[PC = $001D, Time =    0.17 ms, {MEM}]: Attempt to read in a forbidden/reserved position

my code is very simple.. i'm writing a IR decode using AT90S2313, because i have many this kind chip.. about fifteen.

Yes; this is an old story.... (see FAQs in app menu)

You are using a 2313, an small micro with only one byte for the stack pointer.

However, the WinAVR C compiler (GCC) generates code for two bytes, a SPH and SPL. As SPH does not exist, VMLAB warns you about it.

The "solution" (I quote the word solution, since unless someone gurantees that a zero is read when accessing a non-existing SPH, this is a GCC bug):

  -- Go to the menu Options | Error reporting -> Memory
  -- Select to return 0 when reading an unimplemented position.
  -- And uncheck 'Consider an error'.

But again, this is a solution to avoid the warning. What it will happen in real hardware, who knows..


Задача 2. Halfstep на 8 обмоток
-------------------------------

hs.prj

.MICRO "AT90S2313"
.TOOLCHAIN "GCC"
.GCCPATH   "C:\WinAVR"
.GCCMAKE   AUTO
.TARGET    "my_idea.hex"
.SOURCE    "my_idea.c"

.TRACE              ; Activate micro trace

; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.POWER VDD=5 VSS=0  ; Power nodes
.CLOCK 1meg         ; Micro clock
.STORE 250m         ; Trace (micro+signals) storage time

; Micro nodes: RESET, PB0-PB7, PD0-PD5, ACO, TIM1OVF
; Define here the hardware around the micro
; ------------------------------------------------------------

D1 VDD PB0  ; x: Panel LEDs 1 - 8
D2 VDD PB1  ; x: Panel LEDs 1 - 8
D3 VDD PB2  ; x: Panel LEDs 1 - 8
D4 VDD PB3  ; x: Panel LEDs 1 - 8
D5 VDD PB4  ; x: Panel LEDs 1 - 8
D6 VDD PB5  ; x: Panel LEDs 1 - 8
D7 VDD PB6  ; x: Panel LEDs 1 - 8
D8 VDD PB7  ; x: Panel LEDs 1 - 8

hs.c

#include <avr\io.h>        // Most basic include files
#include <util\delay.h>    // here

unsigned char st[] =
    {1,3,2,6,4,0xc,8,0x18,0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x81};

int main(void) {
    int i = 0;
    DDRB = 0xff;
    PORTB = 0;
    _delay_ms(1);
    while(1) {
        PORTB = st[i++];
        i = (i>15) ? 0 : i;
        _delay_ms(1000);
   }
   return 0;
}
