Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » ТВ выход на bascom avr


ТВ выход на bascom avr

Сообщений 391 страница 420 из 421

391

Ev3658 написал(а):

Крутая штука, а мне всё никак А1 не привезут

Перед этим делом, надо вначале произвести тестирование памяти, есть подозрения, что она не сможет хорошо работать при разогнанном МК.

0

392

Разгонять за 50мгц нельзя, 45 оказалось вполне годным, да и 44 хватает.
Используйте мои наработки, там DMA не постоянно в работе.
Если DMA будет в работе, то между отсылкой байтом мало тактов на выполнение программы.
Заметил её то, что после запуска DMA необходимо несколько NOP, иначе запуск не стабильный.

0

393

Ну вот, уже другой темой попахивает  :crazy:
http://s1.uploads.ru/t/KmD82.jpg

+1

394

Выглядит конечно красиво.
А как ты подключал выход на RGB? Понятно, что всё в одну точку (все цвета), но через какой номинал резисторов и ставил ли делитель?

0

395

RDW написал(а):

... через какой номинал резисторов и ставил ли делитель?

75 Ом поставил на всякий случай. Цвет на выбор, на фото сразу три цвета замкнул на разъёме.
Вообще не критично как-то оказалось, лишь бы был сигнал.

0

396

И так, добрался только до теста памяти, сделал простой по маске:

Код:
$regfile = "xm128a1def.dat"
$hwstack = 64
$swstack = 64
$framesize = 64
$crystal = 62000000                                         '32000000
$xramsize = &H800000

$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014

Const Spd = _xtal / 2000000
Config Osc = Enabled , Pllosc = Enabled , Pllsource = Rc2mhz , Pllmul = Spd       '16 * 2 = 32
Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1
Config Clock = Soft , Rtc = 1khz_32khz_crystosc , Gosub = Sectic
Config Priority = Static , Vector = Application , Lo = Enabled

Config Porte.0 = Output
Config Xpin = Porte.0 , Invertio = Enabled                  ' èíâåðñèÿ ïîðòà
Led0 Alias Porte.0
Reset Led0

Config Xram = 3port , Sdbus = 4 , Sdcol = 10 , Sdcas = 3 , Sdrow = 12 , Refresh = 500 , Initdelay = 3200 , Modedelay = 2 , Rowcycledelay = 7 , Rowprechargedelay = 7 , Wrdelay = 1 , Esrdelay = 7 , Rowcoldelay = 7 , Modesel3 = Sdram , Adrsize3 = 8m , Baseadr3 = &H0000
Config Com7 = 19200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8

Dim X(8388607) As Xram Byte , B As Byte
Dim Xadr As Dword
Dim V As Byte
Dim F As Byte
Dim Xdata As Byte
Xdata = 1
V = 0
Xadr = 0

Enable Interrupts

Open "COM7:" For Binary As #1                               ' J1 UART

Print #1 , "CPU Speed:" ; _xtal / 1000000 ; " MHz."
Print #1 , "XRAM Testing..."

Const Sadr = 1
Const Eadr = 8388607

For F = 0 To 7
   Print #1 , " Start write/filling memory mask: " ; Bin(xdata) ; "b"
   For Xadr = Sadr To Eadr
      X(xadr) = Xdata
   Next Xadr
   Print #1 , "  End write/filling memory."

   Print #1 , "  Start read memory mask: " ; Bin(xdata) ; "b"
   For Xadr = Sadr To Eadr
      B = X(xadr)
      If B <> Xdata Then V = 1
   Next Xadr
   Print #1 , "  End read memory."

   If V = 1 Then
      Print #1 , " Test FAIL."
   Else
      Print #1 , " Test PASSED."
   End If
   Rotate Xdata , Left
Next F

Print #1 , "XRAM Test End."

Do
   !nop
Loop
End

Sectic:
   Toggle Led0
Return

И какого было моё удивление:

CPU Speed: 62 MHz.
XRAM Testing...
Start write/filling memory mask: 00000001b
  End write/filling memory.
  Start read memory mask: 00000001b
  End read memory.
Test PASSED.
Start write/filling memory mask: 00000010b
  End write/filling memory.
  Start read memory mask: 00000010b
  End read memory.
Test PASSED.
Start write/filling memory mask: 00000100b
  End write/filling memory.
  Start read memory mask: 00000100b
  End read memory.
Test PASSED.
Start write/filling memory mask: 00001000b
  End write/filling memory.
  Start read memory mask: 00001000b
  End read memory.
Test PASSED.
Start write/filling memory mask: 00010000b
  End write/filling memory.
  Start read memory mask: 00010000b
  End read memory.
Test PASSED.
Start write/filling memory mask: 00100000b
  End write/filling memory.
  Start read memory mask: 00100000b
  End read memory.
Test PASSED.
Start write/filling memory mask: 01000000b
  End write/filling memory.
  Start read memory mask: 01000000b
  End read memory.
Test PASSED.
Start write/filling memory mask: 10000000b
  End write/filling memory.
  Start read memory mask: 10000000b
  End read memory.
Test PASSED.
XRAM Test End.

Когда МК разогнался легко до максимума и при этом всё работало и не грелось. А вот А4 уже на 48МГц греться начинало...теперь и не знаю что думать. :) Ещё на али и ебай видел платы с разгоном до 100МГц - это пока для меня загадка.
Тестируется 8МБ по времени весьма не быстро.

Ещё столкнулся с каким-то глюком/недоделкой, 8МБ - это #800000 или 8388608. Массив ДИМ у нас адресуется с 1 значит должно быть 8388608, но по существу выдается ошибка и можно указывать только 8388607!!! :tired: В общем теряется 1 байт. :rofl:

Отредактировано RDW (2017-07-20 20:47:56)

0

397

Да глюков с воспроизведением вообще нет, как и с записью.
Но вот попробуй в момент воспроизведения производить в случайные такты запись - вот тут при разгоне ловил глюки.
Питание если увеличить, меньше глюков будет.

0

398

Посмотри на код, там тебе и запись и чтение, глюков не вижу.
Я же память тестю и вообще А4 (как писал ранее), вообще пускаться не хотел свыше 48, а тут хоть код работает и память, да возможно DMA и глючить будет.

Отредактировано RDW (2017-07-20 23:50:57)

0

399

RDW написал(а):

Посмотри на код, там тебе и запись и чтение, глюков не вижу.
Я же память тестю и вообще А4 (как писал ранее), вообще пускаться не хотел свыше 48, а тут хоть код работает и память, да возможно DMA и глючить будет.

Отредактировано RDW (Вчера 23:50:57)

Не, я типа про это:

Код:
FOR T=1 TO МНОГО

FOR P=1 TO КОНЕЦ
L=D(P)
IF RND*10=5 THEN D(P)=1
IF D(P)>1 THEN PRINT "ERROR"
NEXT P

NEXT МНОГО

0

400

Ev3658 написал(а):

L=D(P)

А зачем? Он нигде не используется.

Ev3658 написал(а):

IF RND*10=5 THEN D(P)=1

Ошибка не компилируется из-за большого количества параметров и неправильного использования функции RND.
В общем поправил так:

Код:
Do
   For Xadr = Sadr To Eadr
      B = X(xadr)
      If Rnd(10) = 5 Then X(xadr) = 1
      If X(xadr) > 1 Then Print #1 , "ERROR: #" ; Hex(xadr)
   Next Xadr
   Print #1 , "Next."
Loop

Да, есть ошибка, причем ошибка есть даже на корректной частоте - делай выводы сам. :D
Если не догадаешься откуда ошибка - расскажу.

Отредактировано RDW (2017-07-21 10:22:26)

0

401

В общем всё работает без ошибок:

CPU Speed: 62 MHz.
XRAM Testing...
Test2...
Next.
Next.
Next.
Next.
Next.

0

402

Да я так, образно скинул алгоритм. Есть ещё одна проблема, контроллер у меня запускается каждый раз по разному, бывает запустится и строки дребезжат (ребут помогает). Причину не могу найти.

0

403

Я не телепат, непонятно, что ты там делаешь и что значит "строки дребезжат"?
Тебе привезли А1 и прикрутил к ней SDRAM?

А проблема в твоём алгоритме - не проблема. Просто по документации внутренняя RAM МК сбрасывает в нуль при включении (аппаратно), а тут внешняя память, при включение ячейки имеют рандомное состояние - это азы. Следовательно это надо учитывать, как правило все процессоры/компьютеры её очищают программно после включения.

0

404

Не, не привезли ещё A1, по этому проект продолжил, так как сроки уже дважды поджимали )))
На работе капец, уволили наконец-то амёбного коллегу, может возьмут второго и проще будет, а то вообще туплю, пол часа думал, почему условие IF Tm1=1 And Tm2=1 And Tm3=1 Then ....  - не срабатывает после такого подсчёта:

Код:
Incr Tm1
If Tm1 = 255 Then Incr Tm2
If Tm2 = 255 Then Incr Tm3

Порой оборачиваюсь назад и понимаю, что тупею чаще, чем умнею  %-)

0

405

Ev3658 написал(а):

Порой оборачиваюсь назад и понимаю, что тупею чаще, чем умнею

Это скорее всего отвлекающие внешние факторы и внутреннее давление сроков. ;)

0

406

https://www.youtube.com/watch?v=_J8_8tWNtas

+2

407

На 128 меге только текст и то удивительно, что 640х480, хотя по шрифту такого не скажешь.
У меня круче было ))))) - https://www.youtube.com/watch?v=XThpf852ldY

0

408

Народ часто путает режим с реальным разрешением. Причем реально не разобравшись, ибо 640х480 - это в реале со всеми системными задержками и теневыми областями, по существу 800х600.
А вот с ЛА3 я чот не понял, зачем там она.

0

409

Жесть, пришел контроллер Atxmega128A1.... и тут я сел... TQFP100, не 64 ноги, а настоящий многодрыг в таком-же по размерам корпуса!!!!
Придётся лутить очень осторожно, не надавливая сильно на утюг.
Есть успехи с выводом сигнала через DMA и EBI?

0

410

Ev3658 написал(а):

Есть успехи с выводом сигнала через DMA и EBI?

честно, я пока забил (сменились чуть приоритеты)

Ev3658 написал(а):

Жесть, пришел контроллер Atxmega128A1.... и тут я сел... TQFP100

Ну я тут паял FPGA 144 ноги - норм, правда не лутил, а готовую плату заказывал.

0

411

RDW написал(а):

XMEGA-A1 Xplained

Есть схемка подключения EBI к чипу памяти?
Вообще не зря EBI назвали ЕБИ, память в XMEGA-A1 Xplained примерно такая - http://www.farnell.com/datasheets/1674463.pdf
Но в Xmega128A1 всего 3 порта, если не усложнять схему, то конфигурация самая простая SDRAM 3P - D0-D3, A0-A11. Но 4 бита данных это мало.

0

412

Всё есть, ща на работе, вечером могу выложить. Если ждать нет мочи, то можешь на фирменном сайте скачать, я от туда брал.
Память там по разным конфигурациям можно подключать, но с шиной данных не разбирался.

0

413

Вот всё, что было.

+2

414

Спасибо!!! Теперь всё ясно.
Вообщем любую память не подключишь, точней можно. но придётся кучу внешней логики использовать.
Память MT48LC16M4A2 не очень распространена, но она может выводит 4 бита и работать в нужном режиме (SDRAM 3P) EBI Xmega.
http://sh.uploads.ru/t/ghcdr.png

0

415

http://sh.uploads.ru/t/rfwnk.png

Печатная плата и исходник - https://yadi.sk/d/ssgfGMov3NpPoF

Печатная плата разведена под RGB на всякий случай, вдруг кто решится вывести цветные буквы в меньшем разрешении.
Управление картой простое, вот код управляющего контроллера:

Свернутый текст
Код:
Config Com6 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
'Config Serialin = Buffered , Size = 20
On Usarte1_rxc Serialinput

Open "COM6:" For Binary As #1
Config Porte.6 = Input
Config Porte.7 = Output
Cts Alias Pinf.0
Config Portf.0 = Input
Declare Sub Point(byval Xx As Word , Byval Yy As Byte , Byval Dd As Byte)
Declare Sub Liner(byval Xx1 As Word , Byval Yy1 As Byte , Byval Xx2 As Word , Byval Yy2 As Byte , Byval Dl As Byte , Byval Tire As Byte)
Declare Sub Text(byval Xxx As Byte , Byval Yyy As Byte , Byval Ntt As Byte , Ss As String * 34 )
Declare Sub Clsvga()
'''
'''
'''
'''






Sub Point(byval Xx As Word , Byval Yy As Byte , Byval Dd As Byte)
Ohranatx = 0
Do
Incr Ohranatx
Waitus 15
If Ohranatx = 255 And Cts = 1 Then Put#1 , 10
Loop Until Cts = 0
Put #1 , 80
Brs = Low(xx)
Put #1 , Brs
Brs = High(xx)
Put #1 , Brs
Put #1 , Yy
Put #1 , Dd

End Sub

Sub Liner(byval Xx1 As Word , Byval Yy1 As Byte , Byval Xx2 As Word , Byval Yy2 As Byte , Byval Dl As Byte , Byval Tire As Byte )
Ohranatx = 0
Do
Incr Ohranatx
If Ohranatx = 255 And Cts = 1 Then Put#1 , 0
Waitus 30
Loop Until Cts = 0                                          ' Or Ohranatx = 255
Put #1 , 76                                                 '"L"
Put #1 , Low(xx1)
Put #1 , High(xx1)
Put #1 , Yy1
Put #1 , Low(xx2)
Put #1 , High(xx2)
Put #1 , Yy2
Put #1 , Dl
Put #1 , Tire

End Sub

Sub Text(byval Xxx As Byte , Byval Yyy As Byte , Byval Ntt As Byte , Ss As String * 34 )
Ohranatx = 0
Do
Incr Ohranatx
If Ohranatx = 255 And Cts = 1 Then Put#1 , 0
Waitus 30
Loop Until Cts = 0
Put #1 , 84                                                 '"T"
Put #1 , Xxx
Put #1 , Yyy
Put #1 , Ntt
Print #1 , Ss
End Sub

Sub Clsvga()
Ohranatx = 0
Do
Incr Ohranatx
If Ohranatx = 255 And Cts = 1 Then Put#1 , 0
Waitus 30
Loop Until Cts = 0
Put #1 , 67                                                 '"C"
Put #1 , 76                                                 '"L"
'Put #1 , 0
Waitms 1
End Sub

Использование вывода CTS - не знай, почему его так назвал, вообщем он обязательно нужен. контроллер VGA не всегда может обработать данные быстро и он будет тормозить управляющий контроллер.

Если кто заинтересуется, то буду рад оптимизации рисования графики в VGA карте, сейчас там сырой не оптимизированный рукожопный код, если ускорить алгоритмы, видео карта будет отличным механизмом.
Есть ещё одна проблема, иногда почему-то контроллер стартует и синхронизация получается нестабильной. но думаю это как-то можно решить, к примеру сделать датчик удараи будет как по старинке )))) - вдарил и контроллер сбросился )))).

Отредактировано Ev3658 (2017-10-17 11:19:12)

0

416

Непонятно, что в итоге получилось? Какие хар-ки? Видео есть? Вообще какой профит использование внешней памяти?
Я вот предполагал честно выводить цветную картинку (24 бит) и желательно не меньше 640х480. Стремлюсь по крайней мере к этому. Это мысли в слух, сам пока к коду не приступал.

0

417

Ну не, Xmega цвет 640х480 не выведет, так как процессор будет в работе, через Usart  - это примерно около 10 тактов между отправкой свободных будет + бордюры.
У меня вышло где-то 320х200 точек, связь по Uart + ещё 1 вывод. Цветные точки не получится даже на 320х200 точек, но если уменьшить. то можно чей.
Печатка для эксперимента самое то. В работе вот эта картинка:
http://s1.uploads.ru/t/KmD82.jpg

0

418

Никак не могу побороть одну проблему, всё работает, но при включении может включится с помехами, которые после сброса убираются.
Если сбрасывать контроллер программно через Watchdog, результат такой-то как и отклчюать питания.
Проблему в появлении неравномерности передачи данных по SPI, то ровно, а если не ровно, то сделать сброс и может быть ровно.
От питания это не зависит, от разгона тоже, два разных контроллера пробовал и всё одно и тоже.
Такое ощущение, что МК запускается не всегда стабильно от кварца.

0

419

Ну как варианты:
- питание проверь (без помех);
- поменьше соплей (флюс или куча проводов, наводки).

0

420

RDW написал(а):

Ну как варианты:
- питание проверь (без помех);
- поменьше соплей (флюс или куча проводов, наводки).

Не, это сразу можно отбросить, несколько разных плат.
Тут точно чего-то происходит внутри кристалла, не зависит от использования DMA, явно связано с тактированием SPI, номинал кварца и его умножение на это не влияют, скорость SPI тоже не влияет, глюк какой-то в запуске SPI, либо ровно запускает, либо с постоянной задержкой (лечится через RESET).

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » ТВ выход на bascom avr