Hi,
Ich denke die Überschrift sagt bereits das meiste aus, aber konkret geht
es mir um dieses Problem: Ich habe folgenden bascom-Quelltext
geschrieben:
1 | $regfile = "m8def.dat"
|
2 | $crystal = 8000000
|
3 |
|
4 | Dim Number As Byte
|
5 | Dim Seg1 As Byte '10er Anzeige
|
6 | Dim Seg2 As Byte '1er Anzeige
|
7 | Dim Seg3 As Byte 'LED Anzeige, bei erstem test obsolet
|
8 | Dim Einer As Byte 'Evtl anderer Typ, muss nur 0-9 beinhalten
|
9 | Dim Zehner As Byte 'Evtl anderer Typ
|
10 | Dim I As Byte
|
11 | Dim Lednumber As Byte 'lednumber 0-6
|
12 |
|
13 | Config Timer0 = Timer , Prescale = 64
|
14 | Enable Timer0
|
15 |
|
16 | On Timer0 Isr_timer0
|
17 |
|
18 | Enable Interrupts 'Interrupts global aktivieren
|
19 |
|
20 | Config Portb = Output
|
21 | Config Portc = Output
|
22 | Config Portd = Input
|
23 | Portd = &B11111111 ' Pull-up Widerstatände aktivieren
|
24 |
|
25 | Number = 0
|
26 | I = 0
|
27 | Lednumber = 0 'Standard W4 keine LED
|
28 |
|
29 | Do
|
30 | Debounce Pind.2 , 0 , Isr_int0 , Sub
|
31 | Debounce Pind.3 , 0 , Isr_int1 , Sub
|
32 | Zehner = Number \ 10 '\ beudetet ganzzahldivision
|
33 | Zehner = Zehner Mod 10 'Dumm dass man nur ein Befehl pro Zeile tun darf: Zehner = number\10mod10
|
34 | Einer = Number Mod 10
|
35 | Seg1 = Lookup(zehner , Segdata) 'Ansteuerung ist ja für Seg1 und Seg2 gleich, da beide gleich beschaltet sind
|
36 | Seg2 = Lookup(einer , Segdata)
|
37 | Seg3 = Lookup(lednumber , Leddata)
|
38 | Loop
|
39 | End
|
40 |
|
41 | Isr_int0:
|
42 | Incr Number
|
43 | Return
|
44 |
|
45 | Isr_int1:
|
46 | If Lednumber <= 5 Then
|
47 | Incr Lednumber
|
48 | Else
|
49 | Lednumber = 0
|
50 | End If
|
51 |
|
52 |
|
53 | Isr_timer0:
|
54 | If I = 0 Then
|
55 | Portc = &B00000001
|
56 | Portb = Seg1
|
57 | Incr I
|
58 | Elseif I = 1 Then
|
59 | Portc = &B00000010
|
60 | Portb = Seg2
|
61 | Incr I
|
62 | Elseif I = 2 Then
|
63 | Portc = &B00000100
|
64 | Portb = Seg3
|
65 | I = 0
|
66 | End If
|
67 | Return
|
68 |
|
69 | Segdata:
|
70 | Data &B00111110 , &B00011000 , &B00101101 , &B00011101 , &B00011011 , &B00010111 , &B00110111 , &B00011100 , &B00111111 , &B00011111 'ByteCode für Segmentanzeigen eintragen:Reihenfolge :0-9
|
71 | Leddata:
|
72 | Data &B00000000 , &B00000001 , &B00000010 , &B00000100 , &B00001000 , &B00010000 , &B00100000
|
Hauptsinn dessen ist es, 2 7-Segment-Anzeigen und 7 LEDs zu multiplexen.
Mit dem atmega8L-8PU funktioniert das absolut flimmerfrei mit obiger
config.
Nutze ich nun den günstigeren atmega8-16PU, so flimmert die Anzeige bei
gleicher config.
Was kann ich dagegen tun und worin liegt der Unterschied zwischen den
zwei AVRs?
//Bitte die eventuell seltsamen Kommentare im Quelltext ignorieren ;)
Danke für alle Antworten;)
LG
tyzmon