BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Подскажите, прочитал в обучалке, что для работе с ЖКИ-панелями не обязательно подключать библиотеку lcd4.lbx, а достаточно в конфигураторе настроить подключение. В Bascom-симуляторе все работает нормально и без библиотеки, но на реальном экране без нее ничего не выводит. Может нужно указать еще какие-нибудь настройки?
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение max50 »

Нужно правильно сконфигурировать дисплей. Посмотри по ссылке:
http://radiokot.ru/forum/viewtopic.php?p=751859#p751859
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Мой фрагмент кода не отличается по настройкам от указанного примера (только пины другие):

Код: Выделить всё

$regfile = "AtTiny2313.dat"
$crystal = 4000000
$hwstack = 32   
$swstack = 10                                             
$framesize = 40                                           
$lib "lcd4.lbx"
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 16 * 2
Cursor Off
Locate 1 , 1
Lcd.............

В конфигураторе задано точно такое же подключение. Но как только я убираю строку $lib "lcd4.lbx", на экран ничего не выводится.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

А куда у Вас контакт RW подключён ? Усли на порт, перекинте на землю.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

RW на земле. Конечно, подключение библиотеки - не так страшно: память МК еще не забита.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

dhouse писал(а):RW на земле. Конечно, подключение библиотеки - не так страшно: память МК еще не забита.

Подключение той или иной библиотеки на увеличение размера кода почти не влияет. Это касается только длинных переменных типа LONG, SINGLE, DOUBLE. Ну и в некоторых случаях WORD. Если в коде используятся только переменные типа BYTE и BIT, всяко-разные библиотеки на размер почти не влияют, ну может на пару %%. Не более того. :idea:
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

dhouse писал(а):В конфигураторе задано точно такое же подключение. Но как только я убираю строку $lib "lcd4.lbx", на экран ничего не выводится.

Так сделайте:

Код: Выделить всё

$regfile = "AtTiny2313.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Portb = Output
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 16 * 2
Deflcdchar 0 , 31 , 16 , 30 , 17 , 17 , 17 , 30 , 32
Cursor Off
Do
Locate 1 , 1
Lcd "BPETE!!!"
Locate 2 , 1
Lcd "BCE PA" ; Chr(0) ; "OTAET"
Waitms 500
Loop
End

Архив WinRAR.rar
(14.41 КБ) 195 скачиваний
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

А вот такой вопрос. Кто знает, почему при любом входном значении АЦП - на индикаторе нули (индикатор с ОА) Код ниже:

Код: Выделить всё

$regfile = "attiny26.dat"
$crystal = 8000000

$lib "mcsbyte.lbx"
$lib "mcsbyteint.lbx"
'********************************************************************
Ddra = &B11110100 : Porta = 0
Ddrb = &B01110111 : Portb = 0
Config Adc = Single , Prescaler = Auto , Reference = Off
Config Timer0 = Timer , Prescale = 8
Config Watchdog = 2048
'********************************************************************
'
'*******************
Razr1 Alias Portb.0
Razr2 Alias Portb.1
Razr3 Alias Portb.2
A Alias Portb.4 : B Alias Portb.5 : C Alias Portb.6 : D Alias Porta.4
E Alias Porta.5 : F Alias Porta.6 : G Alias Porta.7
'*******************
Dim Result As Byte
Dim W As Byte , Z As Byte , Y As Byte , I As Byte , X As Byte
Dim Chislo(8) As Integer
'*********************************
Const Uref = 5
Const K = 5

'*********************************
On Timer0 Pulse
Enable Timer0
Enable Interrupts
'*********************************
For X = 1 To 3
Chislo(x) = 10
Next

Do
Stop Timer0
Start Adc
Result = Getadc(0)
Stop Adc
Start Timer0
Result = Result * Uref
Result = Result / 1024
If Result < K Then Chislo(3) = 11
Chislo(1) = Result Mod 10
Chislo(2) = Result / 10
Chislo(3) = 0
If Result >= K Then
Set Porta.2
Chislo(1) = 10
Chislo(2) = 10
Chislo(3) = 10
End If
Waitms 1800
Loop

End

Pulse:
Reset Watchdog
Stop Timer0                                                 ' останавливаем таймер 0
Set Razr1 : Set Razr2 : Set Razr3
Incr W : If W > 3 Then W = 1                                ' выбираем какую цифру сейчас включать
Y = 0
Gosub Look : A = Z                                          ' переходим к подпрограмме Look, которая определяет нужно ли сейчас загорется сегменту А
Gosub Look : B = Z
Gosub Look : C = Z
Gosub Look : D = Z
Gosub Look : E = Z
Gosub Look : F = Z
Gosub Look : G = Z
Start Timer0                                                ' запускаем таймер0
Return

Look:                                                       ' подпрограмма которая определяет нужно ли сейчас гореть сегменту, который вызвал эту подпрограмму
Z = Chislo(w) * 7 : Z = Y + Z                               ' определяем порядковый номер числа из таблици DATA. W - это цифра которую будем выводить 0..1..2..3...9,
Z = Lookup(z , Cifri)                                       ' выбираем из таблици включить или выключить нужный сегмент
Incr Y                                                      'Y это номер сегмента (A=0 B=1 C=2...)
Return                                                      'возвращаемся на место откуда сюда прислали

Cifri:
'       |Chislo(i)                           |           # Символа |
Data 1 , 1 , 1 , 1 , 1 , 1 , 0                              '0
Data 0 , 1 , 1 , 0 , 0 , 0 , 0                              '1
Data 1 , 1 , 0 , 1 , 1 , 0 , 1                              '2
Data 1 , 1 , 1 , 1 , 0 , 0 , 1                              '3
Data 0 , 1 , 1 , 0 , 0 , 1 , 1                              '4
Data 1 , 0 , 1 , 1 , 0 , 1 , 1                              '5
Data 1 , 0 , 1 , 1 , 1 , 1 , 1                              '6
Data 1 , 1 , 1 , 0 , 0 , 0 , 0                              '7
Data 1 , 1 , 1 , 1 , 1 , 1 , 1                              '8
Data 1 , 1 , 1 , 1 , 0 , 1 , 1                              '9
Data 0 , 0 , 0 , 0 , 0 , 0 , 1                              '10           "-"
Data 0 , 0 , 0 , 0 , 0 , 0 , 0                              '11           "" пусто
'*******************************************************************************
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Во-первых: где у Вас в индикации зажигается нужный разряд? Там только гашение... Просто не дописали? Впрочем, дело не в этом. Вы пытаетесь запихнуть результат чтения АЦП в переменную типа byte (Result) забыв о том что результат 10-ти битный. Ну и про расчет я молчу, как можно делить на 1024 если переменная byte.

Да еще до кучи цифры прописаны для ОК. Так что это у Вас не нули горят а прочерки. :)
Строчка Set Razr1 : Set Razr2 : Set Razr3 гасит все разряды (в вашем случае с ОА она наоборот включает все разряды), так что индикация не работает совсем.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

После того как код станет работоспособным в плане индикации, обратите внимание на расчет:

Код: Выделить всё

Result = Result * Uref
Result = Result / 1024


Допустим мы считали 1000. 1000*5 / 1024 = 4,88. Так как переменная целая, то и результат заберется только до точки. То бишь Result = 4. С таким расчетом можно будет вывести только 1 - 2 - 3 - 4 - 5 В. Без десятых и сотых.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Ну, допустим, я умножу результат на 100. Тогда в переменной будет число 488. Так вот, я не пойму, как его распихать по разрядам?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Ну зачем ее дополнительно умножать? Тем более так просто не получится, надо будет переменную с точкой делать. Можно просто сделать переменную Result типа Long и константу 500. На нее и умножать. В результате в Result будут 3 цифры, которые можно спокойно разбить на разряды. Например, так:

Код: Выделить всё

' если необходимо - гасим незначащий ноль
If Result >= 100 Then Chislo(1) = Result / 100 Else Chislo(1) = 11     
Result = Result Mod 100 ' забираем вторую и третью цифры
Chislo(2) = Result / 10   ' распихиваем их по разрядам
Chislo(3) = Result Mod 10
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Все равно нифига не получается. :( При таком коде:

Код: Выделить всё

Dim Result As Long , Ch As Byte
Dim W As Byte , Z As Byte , Y As Byte , I As Byte , X As Byte
Dim Chislo(8) As Integer
Dim Dp_flag1 As Bit , Dp_flag2 As Bit , Dp_flag3 As Bit , Dp_flag4 As Bit
'*********************************************************************
Const Umax = 500
'*********************************************************************
On Adc Adc_isr
On Timer0 Pulse
Enable Adc
Enable Timer0
Enable Interrupts
'*********************************************************************
Dp_flag1 = 0
Dp_flag2 = 0
Dp_flag3 = 0
Dp_flag4 = 0

Do
Ch = 5
Stop Timer0
Start Adc
Idle
Stop Adc
Start Timer0

Result = Result * 5
Result = Result / 1024
Result = Result * Umax


If Result >= 100 Then Chislo(3) = Result / 100 Else Chislo(3) = 11
Result = Result Mod 100
Chislo(2) = Result / 10
Chislo(1) = Result Mod 10
Chislo(4) = 12
Dp_flag3 = 1

If Result > Umax Then
   Dp_flag3 = 0
   Chislo(1) = 10
   Chislo(2) = 10
   Chislo(3) = 10
   Chislo(4) = 10
End If

Waitms 1500

Loop

End

- - на индикаторе вот это:http://image050.mylivepage.ru/chunk50/3536729/2520/%21%21%21.png?download=1
Вот эти две строки убирал:

Код: Выделить всё

Result = Result * 5
Result = Result / 1024
Результат тот же. На идикаторе : "U2.00". - и это при входном напряжении 4.76 вольта. И от этих нулей я никак не могу избавиться, хотя входное напряжение меняю всяко-разно.
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Еще старый код не заработал у Вас (у меня он с минимальными правками вчера сразу запустился), а тут уже 4 разряда. :) И опять мне Ваш расчет непонятен. Смотрите, допустим у Вас опорное - 5 В. Значит при 0 В на входе АЦП в регистрах ADCH:ADCL будет 0. А при 5 В на входе в регистрах будет 1023.

Допустим мы подали на вход почти максимум опорного и АЦП считал 1000. Считаем по вашему коду:

1000*5/1024 = 4,88 - вот собственно результат. 4,88 В на входе. Но так как переменная LONG без точки, то результат расчета будет 4. А далее мне совсем непонятно. 4*500 = 2000.

Я имел ввиду так для трех разрядов:

1000*500/1024 = 488. Все, три разряда готовы принять переменную для разноса по разрядам.

Давайте Ваш код полностью. Можно в личку. Там все просто.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

edm2007 писал(а):На идикаторе : "U2.00"


Все правильно, так и будет. Я выше написал почему так будет. Вы никогда при таком расчете от нулей не избавитесь, потому как фактически забираете только первую цифру. Все что Вы можете добиться - это вывести 100 - 200 - 300 - 400 - 500.
Последний раз редактировалось edm2007 Сб апр 16, 2011 10:43:07, всего редактировалось 1 раз.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Видимо, с динамической индикацией мне, таки разобраться не судьба! Ну не понимаю я этих вычислений типа Mod 10, Mod 100 и т.п. Принцип работы понятен, на два разряда могу разбить свободно, а вот если разрядов больше двух - все, затык и всякая хрень на индикаторе. Может кто объяснит, как длинные числа, в том числе с десятичной точкой правильно разбивать поразрядно?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Зачем же в личку, у меня секретов ни от кого нет. Может кому-то еще будет полезно! Вот весь код, правда теперь переделан под мегу8, в тини26 не влазил, хотя потом постараюсь запихнуть и в нее: :)

Код: Выделить всё

$regfile = "m8def.dat"
$crystal = 8000000

'********************************************************************
Ddrb = &B00111111 : Portb = 0
Config Portd = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Timer , Prescale = 8
Config Watchdog = 1024
'********************************************************************
'********************************************************************
Razr1 Alias Portd.0 : Razr2 Alias Portd.1
Razr3 Alias Portd.2 : Razr4 Alias Portd.3
A Alias Portb.5 : B Alias Portb.4 : C Alias Portb.3 : D Alias Portb.2
E Alias Portb.1 : F Alias Portb.0 : G Alias Portd.7 : Dp Alias Portd.6
'*********************************************************************
Dim Result As Long , Ch As Byte
Dim W As Byte , Z As Byte , Y As Byte , I As Byte , X As Byte
Dim Chislo(8) As Integer
Dim Dp_flag1 As Bit , Dp_flag2 As Bit , Dp_flag3 As Bit , Dp_flag4 As Bit
'*********************************************************************
Const Umax = 500
'*********************************************************************
On Adc Adc_isr
On Timer0 Pulse
Enable Adc
Enable Timer0
Enable Interrupts
'*********************************************************************
Dp_flag1 = 0
Dp_flag2 = 0
Dp_flag3 = 0
Dp_flag4 = 0

Do
Ch = 5
Stop Timer0
Start Adc
Idle
Stop Adc
Start Timer0

'Result = Result * 5
'Result = Result / 1024
Result = Result * Umax


If Result >= 100 Then Chislo(3) = Result / 100 Else Chislo(3) = 11
Result = Result Mod 100
Chislo(2) = Result / 10
Chislo(1) = Result Mod 10
Chislo(4) = 12
Dp_flag3 = 1

If Result > Umax Then
   Dp_flag3 = 0
   Chislo(1) = 10
   Chislo(2) = 10
   Chislo(3) = 10
   Chislo(4) = 10
End If

Waitms 1500

Loop

End

Pulse:
Reset Watchdog
Stop Timer0

Reset Razr1 : Reset Razr2 : Reset Razr3 : Reset Razr4
Incr W : If W > 4 Then W = 1
Y = 0
Gosub Look : A = Z
Gosub Look : B = Z
Gosub Look : C = Z
Gosub Look : D = Z
Gosub Look : E = Z
Gosub Look : F = Z
Gosub Look : G = Z

Select Case W
Case 1 :
If Dp_flag1 = 1 Then Reset Dp Else Set Dp
Set Razr1
Case 2 :
If Dp_flag2 = 1 Then Reset Dp Else Set Dp
Set Razr2
Case 3:
If Dp_flag3 = 1 Then Reset Dp Else Set Dp
Set Razr3
Case 4:
If Dp_flag4 = 1 Then Reset Dp Else Set Dp
Set Razr4
End Select

Start Timer0
Return

Adc_isr:
  push r26
  push r27
  push r24
  in r24,sreg
  push r24
  push r25
  Result = Getadc(ch)

  pop r25
  pop r24
  !out sreg,r24
  pop r24

  pop r27
  pop r26
Return

Look:                                                       ' подпрограмма которая определяет нужно ли сейчас гореть сегменту, который вызвал эту подпрограмму
Z = Chislo(w) * 7 : Z = Y + Z                               ' определяем порядковый номер числа из таблици DATA. W - это цифра которую будем выводить 0..1..2..3...9,
Z = Lookup(z , Cifri)                                       ' выбираем из таблици включить или выключить нужный сегмент
Incr Y                                                      'Y это номер сегмента (A=0 B=1 C=2...)
Return                                                      'возвращаемся на место откуда сюда прислали

Cifri:
'       |Chislo(i)                           |           # Символа |
Data 0 , 0 , 0 , 0 , 0 , 0 , 1                              '0
Data 1 , 0 , 0 , 1 , 1 , 1 , 1                              '1
Data 0 , 0 , 1 , 0 , 0 , 1 , 0                              '2
Data 0 , 0 , 0 , 0 , 1 , 1 , 0                              '3
Data 1 , 0 , 0 , 1 , 1 , 0 , 0                              '4
Data 0 , 1 , 0 , 0 , 1 , 0 , 0                              '5
Data 0 , 1 , 0 , 0 , 0 , 0 , 0                              '6
Data 0 , 0 , 0 , 1 , 1 , 1 , 1                              '7
Data 0 , 0 , 0 , 0 , 0 , 0 , 0                              '8
Data 0 , 0 , 0 , 0 , 1 , 0 , 0                              '9
Data 1 , 1 , 1 , 1 , 1 , 1 , 0                              '10           "-"
Data 1 , 1 , 1 , 1 , 1 , 1 , 1                              '11           "" пусто
Data 1 , 0 , 0 , 0 , 0 , 0 , 1                              '12            U
'*******************************************************************************
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Выше же все есть, буквально тут же. И как в цикле разбить автоматом на 8 разрядов и просто вручную... Я написал пример разноса переменной на 3 разряда. Допустим в переменной 485.

Chislo(1) = Result / 100 - первый разряд (тот что слева), 485/100 = 4,85 Но переменная без десятых, потому заберет только 4.

Result = Result Mod 100 - это остаток от деления на 100. То бишь теперь в переменной 85.

Chislo(2) = Result / 10 - ну а дальше Вы знаете, так как переменная без точки то во втором разряде будет 8.
Chislo(3) = Result Mod 10 - а это остаток от деления на 10 числа 85. То бишь 5.

Все, 4 - 8 - 5. Это самый примитивный разнос в лоб. Можно еще проще.

P.S. Проект протеуса можно? Дабы недоразумений небыло потом.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

edm2007 писал(а):Я имел ввиду так для трех разрядов:

1000*500/1024 = 488. Все, три разряда готовы принять переменную для разноса по разрядам.


Все сделал так, заработало!!! :)) Показывает как надо! edm2007:Огромное спасибо и респект!
Проект Протеуса приложил:
Вложения
Архив WinRAR.rar
(26.32 КБ) 195 скачиваний
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Блин, это я сам запутался. :) Подумал что Вам надо на 4 разряда исключительно АЦП забрасывать. А там же значок U. Тогда конечно и так будет работать. :) И тиньки 26 там за глаза.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

Вернуться в «AVR»