PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prog läuft mit internen Oszillator - mit externem Quarz nich



TobiasBlome
02.10.2009, 11:20
Hallo,
ich habe ein Platine mit ATtiny2313, LCD und Tastern. Wenn ein Taster gedrückt wird, soll der Taster auf dem LCD stehen.

zum meinem Problem:
wenn ich einen 8MHz Quarz benutze habe ich in wildem durcheinander die Taster auf dem LCD stehen und der µC bootet immerwieder neu.........

wenn ich den internen RC oszillator nutze läuft alles bestens...
(da ich aber noch mehr machen möchte soll ein Quarz mit 14,7456MHz rein - aber zum Vergleich ist es vielleicht einfacher erst mal den Fehler bei dem 8MHz Quarz zu finden)

Hardware ich habe es mit 2 Kontensatoren je 33pF und nun 22pF am Quarz getestet - kein Erfolg.

Fusebit KLA987: 111111 Ext.Crystal Osc.; Frequency 8.0- MHz Startuptime 14CK+65ms
ich habe auch schon verschiedene andere versucht....

Am Programm sollte es wohl auch nicht liegen(?).

Hat jemand eine Idee?

Tobias



'Konfiguration µC:

$regfile = "ATtiny2313.dat" 'ATtiny2313-Deklarationen
'$framesize = 24
'$swstack = 8
'$hwstack = 32
'$crystal = 14745600 'Quarz: 14,7456 MHz
$crystal = 8000000
$baud = 9600 'Baudrate definieren
'-------------------------------------------------------------------------------
'Ein / Ausgänge definieren:
Ddrd = &B1111111 'Pin PD5-0 als Eingang / 6 als Ausgang (LCD) konfigurieren
Ddrb = &B11111111

'PullUps setzen:
Portd = &B0111100 '1 = PullUp AKTIV
Portb = &B00100000 '1 = PullUp AKTIV

'-------------------------------------------------------------------------------
'LCD konfiguration
Config Lcd = 20 * 4 'LCD größe
Config Lcdpin = Pin , Rs = Portb.4 , E = Portb.3 , Db4 = Portb.2 , Db5 = Portb.1 , Db6 = Portb.0 , Db7 = Portd.6
Cursor Off Noblink

'-------------------------------------------------------------------------------
'Alias
Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
Taster4 Alias Pind.5
Taster5 Alias Pinb.5

'-------------------------------------------------------------------------------
Cls
Locate 1 , 1
Lcd "RS232 - LCD"

'-------------------------------------------------------------------------------

Do 'Hauptschleife



'Tasterabfrage:
If Taster1 = 0 Then
Print "Taster1"
Cls
Lcd "Taster1"
End If



If Taster2 = 0 Then
Print "Taster2"
Cls
Lcd "Taster2"
End If

If Taster3 = 0 Then
Print "Taster3"
Cls
Lcd "Taster3"
End If

If Taster4 = 0 Then
Print "Taster4"
Cls
Lcd "Taster4"
End If

If Taster5 = 0 Then
Print "Taster5"
Cls
Lcd "Taster5"
End If

Loop


'================================================= ==============================
'Pinbelegung µC
'================================================= ==============================
' AtmelATtiny2313
' +---U---+
' (Reset) PA2 +1 20+ Vcc +5V
' RS232 PD0 +2 19+ PB7 FREI
' RS232 PD1 +3 18+ PB6 FREI
' x x Xtal 2 / PA1 +4 17+ PB5 TASTER 5
' x x Xtal 1 / PA0 +5 16+ PB4 / LCD / RS
' T1 PD2 +6 15+ PB3 / LCD / E
' T2 PD3 +7 14+ PB2 / LCD / DB4
' T3 PD4 +8 13+ PB1 / LCD / DB5
' T4 PD5 +9 12+ PB0 / LCD / DB6
' GND +10 11+ PD6 / LCD / DB7
' +-------+

Besserwessi
02.10.2009, 12:02
Am Programm wird es kaum liegen. Was da eventuell nicht mehr funktioniert, wenn der Takt höher wird, ist das Entprellen der Tasten.


Wenn das Programmieren bzw. auch nur Auslesen per ISP noch geht, sollte der Quarz auch richtig schwingen, denn sonst würde ISP auch nicht gehen. Am Quarz oder den Kondensatoren sollte es also auch kaum liegen. Höchstens wenn es eine starke Störung des Quarz durch benachbarte Leitungen gibt. Habe ich aber noch nicht geschafft.

Was sich ändert bei höherer Frequenz ist: 1) der Strom verbrauch, 2) die mindest nötige Spannung.

Edit: auch mal schaun wie der Enstkoppelkondensator für die Versorgung angeschlossen ist.

TobiasBlome
02.10.2009, 12:10
hmmmmmmm
also Spannung/Strom ist genug Vorhanden: 5V aus einem Labornetzteil - Strom liegt gerade bei 130mA MIT LCD Beleuchtung....

Programmieren ist kein Problem.

Das entprellen sollte sich ja nur äusern, wenn ich die Taster drücke oder? Wenn nichts gedrückt ist sollte auch keine Meldung kommen... hoffe ich

Tobias

Sauerbruch
06.10.2009, 12:07
Ddrd = &B1111111 'Pin PD5-0 als Eingang / 6 als Ausgang (LCD) konfigurieren


Damit setzt Du aber schon mal 7 der 8 Bits als Ausgang!! (Weche das sind, wenn man nur 7 mal "1" schreibt, weiß ich nicht).

Mit "PORTD = &B0111100" setzt Du 5 dieser Ausgänge auch noch auf High, von denen vermutlich einige über die Taster auf Masse geschaltet werden.

Das würde auch die Stromaufnahme erklären: "Nur" 130 mA finde ich ganz schön viel - auch mit LCD-Hintergrundbeleuchtung. Die ziehen bei meinen verwendeten Displays so um 10 bis maximal 20 mA, aber nicht mehr.

Könnte da der Fehler liegen?

TobiasBlome
06.10.2009, 16:35
oha :oops:

Also das war ja wohl nichts....
natürlich muss ich die Pins mit den Tastern als Eingänge definieren....

Das hat die Stromaufnahme auf 80mA gesenkt(egal ob Taster gedrückt oder nicht).

Zu den 7-8Bit: der ATtiny2313 hat auf Port D nur 7 Bit, deshalb ist das so richtig.

Leider hat das nichts daran geändert, dass das Programm mit 8MHz internen Taktgeber sauber läuft und mit externen 8MHz Quarz nicht #-o

Vielen Dank,
Tobias

Sauerbruch
07.10.2009, 13:39
Okay - dass der PORTD beim 2313 nur 7 Bits hat, hatte ich nun wieder übersehen :-)

Haste mal mit Waitms in einer möglichst einfachen Hauptschleife überprüft, ob die Taktfrequenzen überhaupt in plausiblen Größenordnungen liegt? Also z.B. so:




Do
CLS
waitms 500
LCD "Test"
Waitms 500
Loop


BTW kommen mir auch 80mA noch verdächtig viel vor - hast Du sonst wirklich nix dranhängen??

pyr0skull
07.10.2009, 13:59
Je nach Display kann das durchaus sein, mein 240x128 Display zieht so ca. 130mA bei der Beleuchtung. Selbst die kleine DOG-Beleuchtung braucht AFAIK 60mA.

Natürlich leuchten die auch mit viel weniger noch ausreichend, aber das kann man ja über PWM runterregeln.

TobiasBlome
07.10.2009, 16:35
TEST:



Dim Test As Integer

Do 'Hauptschleife

Incr Test
Cls
Lcd Test
Wait 1

Loop


Also nach 60 sec von meiner Stopuhr steht 56 auf dem LCD mit externem 8MHz Quarz

mit dem Internen Taktgeber 8MHz hat der µC nach 60 sec 61 erreicht....


Tobias

Sauerbruch
07.10.2009, 18:12
Okay - dann passt es aber doch ziemlich genau, oder? Eine kleine Differenz zwischen internem RC-Oszillator und dem externen Quarz ist ja durchaus zu erwarten - und dass es es in der Minute nicht ganz bis 60 schafft könnte gut daran liegen, dass der CLS-Befehl ziemlich viel Zeit beansprucht.

Also scheint die Taktung schon mal o.k. zu sein...

TobiasBlome
08.10.2009, 17:50
ja richtig, der Fehler liegt wohl noch wo anders.

Sauerbruch
08.10.2009, 18:22
Wenn nichts gedrückt ist sollte auch keine Meldung kommen... hoffe ich

...das sehe ich anders: Wenn einmal ein Taster gedrückt und somit etwas ins Display geschrieben wurde, bleibt dieser Text auch dann stehen, wenn alle Taster offen sind. Dann saust das Programm halt an allen "if TasterX = 0 then..." - Stellen vorbei - und somit auch an jedem CLS.

Das scheint mir also auch schon mal normal zu sein. Im Gegensatz zu den 80 mA (auch wenn ich mich möglicherweise wiederhole :-) ). Aber alle 4x20-LCD die ich bisher verbaut habe, haben auch mit Beleuchtung nur dann annähernd so viel Strom gezogen, wenn ich die Versorgungsspannung verpolt hatte 8-[

Kannst Du denn den Fehler nochmal etwas genauer beschreiben? Einen Abblockkondenator hast Du am µC dran?

TobiasBlome
08.10.2009, 19:51
ich habe einen großen pufferkondensator, einen 7805 und dazu 2 kleine Kondensatoren, damit der 7805 ausregeln kann ;-)

Also Versorgung ist sauber.

Zur Fehlerbeschreibung kann ich nur sagen, das auf dem LCD UND über die serielle Schnittstelle alle programmierten Texte erscheinen - als wenn jemand wie wild auf die Taster drückt...

Über RS232 kann man gut sehen, das es unterschiedlich viele, aber bis zu ca 20 Texte pro Sekunde!!! sind. (hab mal die Spannung abgezogen und gezählt :-) )

Die Frage die sich mir stellt ist, wie ich das Problem einkreisen kann.

Tobias

Sauerbruch
08.10.2009, 20:06
Die Frage die sich mir stellt ist, wie ich das Problem einkreisen kann.


Stimmen denn die diversen DDR´s inzwischen?
Eigentlich musst Du die in diesem Fall gar nicht speziell bearbeiten: Diejnigen Ports die das LCD ansteuern, werden durch den "Config LCD"-Befehl automatisch als Ausgänge konfiguriert, und alle anderen Ports sind nach dem Power-On-Reset Eingänge. Vielleicht steckt ja doch noch ein kleiner Wurm in diesen (nicht notwendigen) DDR-Zuweisungen...

Wenn nicht, kannst Du den Code ja interessehalber mal in "If TasterX = 1 then..." abändern. Benimmt sich das Programm dann richtig, ist wohl mit den Eingängen was nicht in Ordnung...

TobiasBlome
08.10.2009, 20:11
so ich hab es noch mal auf externen Quarz umgestellt:



RS232 LCD Tobias Blome<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster3<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>

TobiasBlome
08.10.2009, 20:26
ich habe nun die DDR´s ganz rausgenommen - kein Unterschied.
Was ich eben noch nicht erwähnt hatte ist ,dass der µC manchmal neu startet: Die 1te Zeile sieht so aus:
RS232 LCD Tobias Blome<\r><\n>
und die sollte nur einmal geschrieben werden.
Das ist das Ergebnis von ein Paar Sekunden an der Spannungsversorgung:



RS232 LCD Tobias Blome<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster5<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster3<\r><\n>
Taster5<\r><\n>
Taster5<\r><\n>
Taster3<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster3<\r><\n>
<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster3<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster4<\r><\n>
Taster2<\r><\n>
Taster1<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster2<\r><\n>
Taster4<\r><\n>
Taster3<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster3<\r><\n>
<\r><\n>
Taster5<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
RS232 LCD Tobias Blome<\r><\n>
Taster3<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster5<\r><\n>
Taster2<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster4<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>
Taster4<\r><\n>
Taster5<\r><\n>
Taster1<\r><\n>
Taster2<\r><\n>
Taster3<\r><\n>


Die Abfrage auf 1 (If Taster1 = 1 Then) ist genauso.
und statt der Variable den Pin angeben (If Pind.2 =) bringt auch nichts.

Tobias

Sauerbruch
08.10.2009, 20:55
Das ist ja einer der besten Zufallszahlengeneratoren, die ich bisher gesehen habe =P~

Und einfach mal einen anderen 2313 reinsetzen? Mir hat´s kürzlich mal in einem Mega88 den ADC zerschossen - daraufhin hat das Teil auch mächtig Strom gezogen und sehr, sehr wirre Dinge getan...

TobiasBlome
08.10.2009, 21:13
Vielen Dank für dein Bemühen - aber auch mit dem neuen 2313 hat´s nichts geändert. Ich schlaf mal ne Nacht drüber :-)

Tobias