Witam, proszę o schemat podłączenia ATmegi8 do MAX7456.
Załączam obrazek:
Ew, prosze też o przerobienie tego programu aby pasował do atmegi8, chodzi tu o zmiane tylko crystal i regfile? Czy to nie wpłynie na komunikacje SPI? [BASCOM]:
Załączam obrazek:
Ew, prosze też o przerobienie tego programu aby pasował do atmegi8, chodzi tu o zmiane tylko crystal i regfile? Czy to nie wpłynie na komunikacje SPI? [BASCOM]:
'=================================================
'= MAX7456 Video overlay Demo =
'= By EvertDekker.com 2009 =
'= Created with Bascom-Avr: 1.11.9.3.001 license =
'= No copyright for private use =
'= Version 1.1 =
'=================================================
$regfile = "m128def.DAT"
$crystal = 7372800
$baud = 19200
$hwstack = 75
$swstack = 75
$framesize = 50
Config Spi = Hard , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 0 'Setup the hardware spi
Spiinit 'Init the spi bus
'=== Dimension ===
Dim Temp As Byte , Lus As Byte
Dim Regaddr As Byte
Dim Regdata As Byte
Dim Buffer(2) As Byte
Declare Sub Initmax7456()
Declare Sub Videotext(byval Text As String , Byval Ypos As Byte , Byval Xpos As Byte)
Declare Sub Writereg(byval Regaddr As Byte , Byval Regdata As Byte)
Declare Sub Rowbrightness(byval Row As Byte , Byval Brightness As Byte)
Declare Sub Writecustomcharacter(byval Characters As Byte)
'=== Const ===
Const Vm0 = &H00 'Video mode 1
Const Vm1 = &H01 'Video mode 2
Const Hos = &H02 'Horizontal Offset
Const Vos = &H03 'Vertical Offset
Const Dmm = &H04 'Display Memory Mode
Const Dmah = &H05 'Display Memory Address High
Const Dmal = &H06 'Display Memory Address Low
Const Dmdi = &H07 'Display Memory Data In
Const Cmm = &H08 'Character Memory Mode
Const Cmah = &H09 'Character Memory Address High
Const Cmal = &H0A 'Character Memory Address Low
Const Cmdi = &H0B 'Character Memory Data In
Const Osdm = &H0C 'Osd Insertion Mux
Const Osdbl = &H6C 'OSD Black Level
Const Readreg = &H80 'Read register = register + &H80
Const Status_read = &HA0 'Status register
Const True = 1
Const False = 0
'=== Main ===
Initmax7456 'Init the Max7456
Waitms 100
Writecustomcharacter 3 'Write the customcharacters to the MAX7456 NVM, this has only need to be done one's. This line and data can be removed after that.
Do
Videotext "HELLO WORLD" , 1 , 8 'Demo of the various possibilitys
Videotext "MAX7456 Video overlay" , 3 , 3
Videotext "Code written with Bascom-avr" , 4 , 0
Videotext "By Evertdekker.com" , 5 , 5
Videotext "{133}Flashing text{134}" , 9 , 0 '{133}=start blinking text, {134}= stop blinking text
Videotext "{131}WITH BACKGROUND{132}" , 10 , 0 '{131}=enable the background, {132}= disable the background
Videotext "{135}Inverted TEXT{136}" , 11 , 0 '{135}=invert text, {136}= non-inverted text
Videotext "Adjust rowbrightness" , 12 , 0
Videotext "INCLUDE CUSTOM CHARS: + " , 7 , 0
'Rowbrightness 12 , &B00001111 'Change the row brightness, see the SUB for the usage discription
Wait 5
Loop
End
'=== Subroutines===
Sub Initmax7456()
Writereg Vm0 , &B01001100
'01001000 ; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD always, 0=SW Reset, 0=Enable Video Buffer
Writereg Vm1 , &B01111111
'00010100 ; 0 = NA, 001=Background MODE Brightness 7%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT
Writereg Dmm , &B01000000
'01000000 ; 0=NA, 1=8bit operation,
Writereg Hos , &B00011111
'00011111 ; 00=NA, 00000000 = Farthest left (-32 pixels),00100000 = No horizontal offset, 00111111 = Farthest right (+31 pixels)
Writereg Vos , &B00010000
'00010000 ; 000=NA, 00000000 = Farthest up (+16 pixels), 00010000 = No vertical offset, 00011111 = Farthest down (-15 pixels)
End Sub
Sub Videotext(byval Text As String , Byval Ypos As Byte , Byval Xpos As Byte)
Local Charcount As Byte , Tempstring As String * 1 , Tempbyte As Byte , Position As Word , Chars As Byte , Controlcharcount As Byte , Attribute As Byte
Controlcharcount = 0 : Attribute = 0 'Set the local variable to zero
Charcount = Len(text) - 1 'Count the number of characters in the string minus, because we must start at 0
For Chars = 0 To Charcount 'do the loop as much as there are characters
Position = Ypos * 30 'Position where the characters must be showed 30=characters per line
Position = Position + Xpos 'Position + the xpos
Position = Position + Chars 'Position + the charactercount that's handled this loop
Position = Position - Controlcharcount 'There was a controle charater, deduct from the charactercount because it must not be handled as real character
Regdata = High(position) 'Put the highbyte of position in the regdatabuffer
Writereg Dmah , Regdata 'Write the data to the register
Regdata = Low(position) 'Put the lowbyte of position in the regdatabuffer
Writereg Dmal , Regdata 'Write the data to the register
Tempbyte = Chars + 1 'Need the character position from the textstring
Tempstring = Mid(text , Tempbyte , 1) 'Take out 1 character that we need to handle now
Tempbyte = Asc(tempstring) 'Get the ascii value of this character
If Tempbyte < 130 Then 'Character larger then 130 are controle characters
Tempbyte = Tempbyte - 32 'Max7456 character table starts at &H00, so deduct 32 to get it even with the ascii table
Regdata = Lookup(tempbyte , Characterslookup) 'Lookup the character from the datatable
Writereg Dmdi , Regdata 'Write the data to the DisplayMemory register
Else
Incr Controlcharcount 'It's a controle character, increase the counter
If Tempbyte = 131 Then Set Attribute.7 'Set the local background bit in the character attribute
If Tempbyte = 132 Then Reset Attribute.7 'Reset the local background bit
If Tempbyte = 133 Then Set Attribute.6 'Set the blink bit
If Tempbyte = 134 Then Reset Attribute.6 'Reset the blink bit
If Tempbyte = 135 Then Set Attribute.5 'Set the inverse bit
If Tempbyte = 136 Then Reset Attribute.5 'Reset the inverse bit
End If
Regdata = High(position) 'Put the highbyte of position in the regdatabuffer
Regdata = Regdata Or &B00000010 'Set bit1 for the character attribute
Writereg Dmah , Regdata 'Write the data to the register
Regdata = Low(position) 'Put the lowbyte of position in the regdatabuffer
Writereg Dmal , Regdata 'Write the data to the register
Writereg Dmdi , Attribute 'Write the attribute to the DisplayMemory register
Next Carcount
End Sub
Sub Writecustomcharacter(byval Characters As Byte)
Local Count As Byte
For Count = 1 To Characters 'Number of characters that need to be programmed, must match with the characters in the data
Restore Customcharacter 'Goto the begin of the data
Writereg Vm0 , &B01000100 'Disable osd
Read Regdata 'Read the first databyte, is the character to will be programmed
Writereg Cmah , Regdata 'Write to the register
For Lus = 0 To 53 'Each Character is made of 54bytes
Writereg Cmal , Lus 'Write the byteno of the character
Read Regdata 'Read the data from the datatable
Writereg Cmdi , Regdata 'program the data in the shadowram
Next Lus
Writereg Cmm , &HA0 'Copy shadowram to NVram
Waitms 200 'Wait until copy is ready
Next Count
Writereg Vm0 , &B01001100 'enable osd
End Sub
Sub Rowbrightness(byval Row As Byte , Byval Brightness As Byte)
If Brightness > &B00001111 Then Brightness = &B00001111 'B0000xx11 Character Black Level in % of OSD white level 00 = 0% 01 = 10% 10 = 20% 11 = 30%
Regaddr = &H10 + Row 'B000011xx Character White Level in % of OSD white level 00 = 120% 01 = 100% 10 = 90% 11 = 80%
Regdata = Brightness
Writereg Regaddr , Regdata
End Sub
Sub Writereg(byval Regaddr As Byte , Byval Regdata As Byte)
Buffer(1) = Regaddr 'Put both bytes in the array
Buffer(2) = Regdata
Spiout Buffer(1) , 2 'Shift the array out the SPI
End Sub
Characterslookup:
'Convert the ascii table to the Max7456 table. (Not excist) are characters that are not in the MAX7456 table and will show a ? (&H42)
Data &H00 '32 Space
Data &H42 '33 ! (not excist)
Data &H48 '34 ""
Data &H42 '35 # (not excist)
Data &H42 '36 $ (not excist)
Data &H42 '37 % (not excist)
Data &H42 '38 & (not excist)
Data &H47 '39 '
Data &H3F '40 (
Data &H40 '41 )
Data &H42 '42 * (not excist)
Data &H50 '43 + (not excist)
Data &H45 '44 ,
Data &H49 '45 -
Data &H41 '46 .
Data &H47 '47 /
Data &H0A '48 0
Data &H01 '49 1
Data &H02 '50 2
Data &H03 '51 3
Data &H04 '52 4
Data &H05 '53 5
Data &H06 '54 6
Data &H07 '55 7
Data &H08 '56 8
Data &H09 '57 9
Data &H44 '58 :
Data &H43 '59 ;
Data &H4A '60 <
Data &H42 '61 = (not excist)
Data &H4B '62 >
Data &H42 '63 ?
Data &H4C '64 @
Data &H0B '65 A
Data &H0C '66 B
Data &H0D '67 C
Data &H0E '68 D
Data &H0F '69 E
Data &H10 '70 F
Data &H11 '71 G
Data &H12 '72 H
Data &H13 '73 I
Data &H14 '74 J
Data &H15 '75 K
Data &H16 '76 L
Data &H17 '77 M
Data &H18 '78 N
Data &H19 '79 O
Data &H1A '80 P
Data &H1B '81 Q
Data &H1C '82 R
Data &H1D '83 S
Data &H1E '84 T
Data &H1F '85 U
Data &H20 '86 V
Data &H21 '87 W
Data &H22 '88 X
Data &H23 '89 Y
Data &H24 '90 Z
Data &H42 '91 [ (not excist)
Data &H42 '92 \ (not excist)
Data &H42 '93 ] (not excist)
Data &H42 '94 ^ (not excist)
Data &H42 '95 Underscore (not excist)
Data &H42 '96 ` (not excist)
Data &H25 '97 a
Data &H26 '98 b
Data &H27 '99 c
Data &H28 '100 d
Data &H29 '101 e
Data &H2A '102 f
Data &H2B '103 g
Data &H2C '104 h
Data &H2D '105 i
Data &H2E '106 j
Data &H2F '107 k
Data &H30 '108 l
Data &H31 '109 m
Data &H32 '110 n
Data &H33 '111 o
Data &H34 '112 p
Data &H35 '113 q
Data &H36 '114 r
Data &H37 '115 s
Data &H38 '116 t
Data &H39 '117 u
Data &H3A '118 v
Data &H3B '119 w
Data &H3C '120 x
Data &H3D '121 y
Data &H3E '122 z
Data &H42 '123 { (not excist)
Data &H42 '124 | (not excist)
Data &H42 '125 } (not excist)
Data &H42 '126 ~ (not excist)
Customcharacter:
'Total of 3 characters in this datatable
Data &H50 ' Character 80
Data &H55, &H55, &H55, &H55, &H55, &H55, &H55, &H00
Data &H15, &H54, &HAA, &H85, &H52, &HAA, &HA1, &H52
Data &HA0, &HA8, &H52, &H85, &H28, &H02, &H80, &H41
Data &H2A, &HAA, &H15, &H2A, &HAA, &H15, &H42, &H80
Data &H55, &H2A, &HAA, &H15, &H2A, &HAA, &H01, &H02
Data &H85, &H28, &H52, &HA0, &HA8, &H52, &HAA, &HA1
Data &H54, &HAA, &H85, &H55, &H00, &H15
Data &H51 ' Character 81
Data &H55, &H55, &H55, &H55, &H55, &H55, &H55, &H55
Data &H55, &H55, &H56, &H55, &H55, &H56, &H55, &H55
Data &H56, &H55, &H6A, &HAA, &HAA, &H55, &H5A, &H55
Data &H55, &H66, &H55, &H55, &H66, &H55, &H55, &H96
Data &H55, &H55, &H96, &H55, &H56, &H56, &H55, &H59
Data &H56, &H55, &H65, &H56, &H55, &H55, &H56, &H55
Data &H55, &H5A, &H55, &H55, &H55, &H55
Data &H52 ' Character 82
Data &H55, &H55, &H55, &H55, &H55, &H55, &H55, &H55
Data &H55, &H55, &H59, &H55, &H55, &H59, &H55, &H55
Data &H59, &H55, &H6A, &HAA, &HAA, &H55, &H59, &H56
Data &H55, &H59, &H56, &H55, &H65, &H56, &H55, &H65
Data &H56, &H55, &H65, &H56, &H55, &H95, &H56, &H55
Data &H95, &H56, &H56, &H55, &H56, &H56, &H55, &H56
Data &H59, &H55, &H69, &H55, &H55, &H55