Lieber Besucher, herzlich willkommen bei: Das Wettringer Modellbauforum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
'***************************
'*
'* ADC-Test
'*
'***************************
'*
'* Schaltung: LCD 16x2, 4 Bit-Modus; Anschluss s.Config Lcdpin
'* Vcc und AVcc auf +5V; Pins 8 & 22 auf GND; 100nF Kerkos zwischen Vcc, ARef, AVcc und GND bzw.AGND
'* ca. 1nF zwischen ADC0 und AGND (geplant)
'* "alive"-LED mit Vorwiderstand 1k zwischen Portb.1 (Pin 15) und GND
'* Spannungsteiler Poti 10k; Schaltung::
'*
'* AVcc---Poti---Schleifer Poti---Poti---AGND
'* l
'* ADC0 (Pin23)
'*
'*****************************************************************************************************
$regfile = "m8adef.dat" ' ATMega8A; Stacks etc.automatisch aus Bascom übernommen
$crystal = 8000000 ' auf 8 MHz eingestellt (Fuse-Bits!)
$hwstack = 40
$swstack = 16
$framesize = 32
Dim I As Byte ' Zählvariable
Dim Adcval As Word ' ADC-Wert
Dim Adcval_old As Word ' alter ADC-Wert
'Dim Adcval_rest As Word ' Hausaufgabe
Dim Anzahl_blocks As Word ' Anzahl der Bargraph-Zeichen
Dim Anzahl_blocks_old As Word ' alte Anzahl der Bargraph-Zeichen
Config Portb.1 = Output ' "alive"-LED (läuft das Programm noch?)
Alive Alias Portb.1
'***** ADC konfigurieren
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC mit Ref 5 V
'***** LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portb.7 , Rs = Portb.6
Config Lcd = 16x2
Alive = 1 ' "alive"-LED einschalten
Cls ' LCD leeren/initialisieren und schon mal "festen" Text ausgeben
Cursor Off Noblink
Locate 1 , 4
Lcd "ADC-Test"
Locate 2 , 5
Wait 3
Lcd "by M&Ms"
Wait 10
Cls
Lcd "ADC-Wert = " ; Adcval
Do
Adcval = Getadc(0) ' ADC-Wert holen
If Adcval <> Adcval_old Then ' nur rechnen, wenn neuer ADC-Wert vorliegt
Adcval_old = Adcval
Locate 1 , 12
Lcd Adcval ; Spc(3) ' Ausgabe des ADC-Werts in der erstn Zeile,gefolgt von 3 Leerzeichen
Anzahl_blocks = Adcval / 61 ' Anzahl der Bargraph-Zeichen berechnen
If Anzahl_blocks <> Anzahl_blocks_old Then ' nur bei Änderung neuen Bargraph zeichnen
Anzahl_blocks_old = Anzahl_blocks
Locate 2 , 1
Lcd Spc(16) ' Zeile löschen
Locate 2 , 1
For I = 1 To Anzahl_blocks
Lcd Chr(255) ' Block ausgeben
Next I
End If
End If
Toggle Alive '"alive"-LED umschalten
Waitms 200 ' kleine Pause
Loop
End
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Unser LCD stellt einzelne Zeichen in einer 5x8-Matrix dar. Die unterste Reihe ist normalerweise für den Cursor, den wir aber hier nicht benutzen, gedacht.
Mit dem LDC-Designer aus Bascom können wir beliebige Sonderzeichen erstellen. Unser Zeichen Chr(255) sieht so aus ("X" entspricht einem gesetzten,
"." einem nicht gesetzten Punkt, "_" dient als Abstandshalter):
_12345
1XXXXX
2XXXXX
3XXXXX
4XXXXX
5XXXXX
6XXXXX
7XXXXX
8XXXXX
Es liegt also nahe, für die "Verfeinerung" z. B. 4 oder 7 Sonderzeichen mit unterschiedlicher Spalten- oder Zeilenanzahl zu definieren:
_12345_______12345
1X....______1XX...
2X....______2XX...
3X....______3XX...
4X....______4XX...
5X....______5XX...
6X....______6XX...
7X....______7XX...
8X....______8XX... usw.
oder
_12345_______12345
1.....______1.....
2.....______2.....
3.....______3.....
4.....______4.....
5.....______5.....
6.....______6.....
7.....______7XXXXX
8XXXXX______8XXXXX usw.
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
'***************************
'*
'* ADC-Test
'*
'***************************
'*
'* Schaltung: LCD 16x2 mit I2C-Adapter
'* Vcc und AVcc auf +5V; Pins 8 & 22 auf GND; 100nF Kerkos zwischen Vcc, ARef, AVcc und GND bzw.AGND
'* ca. 1nF zwischen ADC1 und AGND (geplant)
'* "alive"-LED mit Vorwiderstand 1k zwischen Portc.0 (Pin 23) und GND
'* Spannungsteiler Poti 10k; Schaltung::
'*
'* ARef---Poti---Schleifer Poti---Poti---AGND
'* l
'* ADC1 (Pin24)
'*
'*****************************************************************************************************
$regfile = "m8adef.dat" ' ATMega8A; Stacks etc.automatisch aus Bascom übernommen
$crystal = 8000000 ' auf 8 MHz eingestellt (Fuse-Bits!)
$hwstack = 40
$swstack = 16
$framesize = 32
Dim I As Byte ' Zählvariable
Dim Adcval As Word ' ADC-Wert
Dim Adcval_old As Word ' alter ADC-Wert
'Dim Adcval_rest As Word ' Hausaufgabe
Dim Anzahl_blocks As Word ' Anzahl der Bargraph-Zeichen
Dim Anzahl_blocks_old As Word ' alte Anzahl der Bargraph-Zeichen
Config Portc.0 = Output ' "alive"-LED (läuft das Programm noch?)
Alive Alias Portc.0
'***** ADC konfigurieren
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC mit Ref 5 V
'***** I2C & LCD konfigurieren
Config Scl = Portc.5 ' I2C Scl (Pin 28)
Config Sda = Portc.4 ' I2C Sda (Pin 27)
Config Lcd = 16x2
$lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
Const Pcf8574_lcd = 126 'Slave-Adresse des I2C-LCDs
'Pcf8574_lcd = 78
'Pcf8574A_lcd = 126
Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
Config I2cdelay = 1 '1=1Mhz,5=200Khz,10=100Khz,15=66,66Khz
'Wenn in Lcd keine Anzeige muß der Delaywert erhöht werden.Mit Wert 15 beginnen und dann langsam verringern.
Waitms 300 'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!
Alive = 1 ' "alive"-LED einschalten
Lcd_backlight = 1
Cls ' LCD leeren/initialisieren und schon mal "festen" Text ausgeben
Cursor Off Noblink
Locate 1 , 4
Lcd "ADC-Test"
Locate 2 , 5
Wait 3
Lcd "by M&Ms"
Wait 1
For I = 1 To 30
Toggle Lcd_backlight
Locate 1 , 1
Waitms 100
Next I
Cls
Lcd "ADC-Wert = " ; Adcval
Do
Adcval = Getadc(1) ' ADC-Wert holen
If Adcval <> Adcval_old Then ' nur rechnen, wenn neuer ADC-Wert vorliegt
Adcval_old = Adcval
Locate 1 , 12
Lcd Adcval ; " " ' Ausgabe des ADC-Werts in der erstn Zeile,gefolgt von 3 Leerzeichen
Anzahl_blocks = Adcval / 61 ' Anzahl der Bargraph-Zeichen berechnen
If Anzahl_blocks <> Anzahl_blocks_old Then ' nur bei Änderung neuen Bargraph zeichnen
Anzahl_blocks_old = Anzahl_blocks
Locate 2 , 1
Lcd " " ' Zeile löschen
Locate 2 , 1
For I = 1 To Anzahl_blocks
Lcd Chr(255) ' Block ausgeben
Next I
End If
End If
Toggle Alive '"alive"-LED umschalten
Waitms 200 ' kleine Pause
Loop
End
|
durch die entsprechende Anzahl von Leerzeichen in Anführungszeichen ersetzt (Zeilen 80 und 86).







möchte ich Euch meine ersten Ergebnisse mit PWM vorstellen.


) arbeiten soll: , Prescale = 8 : Bedeutet, dass Timer 1 nur jeden achten Takt eins hochzählt,
Messgeräten, einem Oszilloskop und einem Frequenzzähler ausgewertet.

|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
'############################################################### ' Blinker (16-Kanal) ' ' Betrieb mit nachgeschalteten ULN2803A an 5V ' Portx.x -- ULN2803A -- 1k -- Kathode LED -- Anode LED -- +5V. '############################################################### '***** Genutzter Microcontroller, Takt in Hz, Stacks & Framesize $regfile = "attiny4313.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '***** Portpin-Configs & Interrupts Config Portb = Output Config Porta.0 = Output Config Porta.1 = Output Config Portd.0 = Output Config Portd.1 = Output Config Portd.2 = Output Config Portd.3 = Output Config Portd.4 = Output Config Portd.5 = Output '***** Aliaszuweisungen Led1 Alias Portb.0 Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portb.6 Led8 Alias Portb.7 Led9 Alias Porta.0 Led10 Alias Porta.1 Led11 Alias Portd.0 Led12 Alias Portd.1 Led13 Alias Portd.2 Led14 Alias Portd.3 Led15 Alias Portd.4 Led16 Alias Portd.5 '***** Variablen und weitere Grundeinstellungen Dim I As Byte ' Standard-Zählvariable Dim Led_sequenz(16) As Word ' 16 LED-Sequenzen à 16 Schaltzustände Dim Impuls As Byte ' legt die Impulsdauer fest Dim Sequenz As Byte ' Länge der Sequenz Werte 0 - 15 entsprechen 1 - 16 Sequenzbits '########################################### ' Spielwiese für persönliche Lichtmuster '########################################### Impuls = 150 ' Impulsdauer in Millisekunden Sequenz = 15 ' s. o. Led_sequenz(1) = &B0000000000000001 ' Sequenz wird von hinten nach vorne abgearbeitet 1 = an, 0 = aus Led_sequenz(2) = &B0000000000000010 Led_sequenz(3) = &B0000000000000100 Led_sequenz(4) = &B0000000000001000 Led_sequenz(5) = &B0000000000010000 Led_sequenz(6) = &B0000000000100000 Led_sequenz(7) = &B0000000001000000 Led_sequenz(8) = &B0000000010000000 Led_sequenz(9) = &B0000000100000000 Led_sequenz(10) = &B0000001000000000 Led_sequenz(11) = &B0000010000000000 Led_sequenz(12) = &B0000100000000000 Led_sequenz(13) = &B0001000000000000 Led_sequenz(14) = &B0010000000000000 Led_sequenz(15) = &B0100000000000000 Led_sequenz(16) = &B1000000000000000 '########################################### ' Ende Spielwiese für persönliche Lichtmuster '########################################### ' '***** Testprogramm (Einmaliger Kontrolldurchlauf beim Start, ob das Programm sauber im korrekten 4 x 1-Sekunden-Takt startet) For I = 1 To 4 Led1 = 1 Wait 1 Led1 = 0 Wait 1 Next I '***** Hauptprogramm Do For I = 0 To Sequenz Led1 = Led_sequenz(1).i Led2 = Led_sequenz(2).i Led3 = Led_sequenz(3).i Led4 = Led_sequenz(4).i Led5 = Led_sequenz(5).i Led6 = Led_sequenz(6).i Led7 = Led_sequenz(7).i Led8 = Led_sequenz(8).i Led9 = Led_sequenz(9).i Led10 = Led_sequenz(10).i Led11 = Led_sequenz(11).i Led12 = Led_sequenz(12).i Led13 = Led_sequenz(13).i Led14 = Led_sequenz(14).i Led15 = Led_sequenz(15).i Led16 = Led_sequenz(16).i Waitms Impuls Next I Loop End |
2 Tips noch meinerseits:
An der Stelle kam nun die Erkenntnis, dass die Syntax des Programms durchaus in Ordnung sein kann, aber die Schaltung dennoch nicht funktioniert.

Mir fehlt einfach die Zeit dafür...

1 Besucher
Blinker, Blitzer, led, Mikrocontroller, Schrittmotor, Sensor, Servo, Sound, Soundmodul
Forensoftware: Burning Board®, entwickelt von WoltLab® GmbH