ih glaub der 64 hat auf jeden fall auch 2 UART und 1 i2c! ist vllt noch günstiger...habe übrogens grade ähnliche überlegungen und anforderungen wie du
Salü
1. Gibt es Kompassmodule, die z.B. über I2C angesprochen werden können?
2. Ich habe jetzt immer problemlos mit ATMEGA16er gearbeitet und brauche jetzt jedoch 2UART... OK, dachte ich, nehme einfach den 162er... Leider bemerke ich nun aber, dass er zwar 2UART's hat, jedoch fehlen ADC und I2C...
Nun bin ich mir nicht sicher, ob ich nen 128er nehmen soll. Jedoch habe ich von Problemen mit diesem gehört oder ist die Umstellung kein Problem?
Ich möchte einfach kein Risiko eingehen...
Soll ich es "wagen" oder nicht?
Merci
ih glaub der 64 hat auf jeden fall auch 2 UART und 1 i2c! ist vllt noch günstiger...habe übrogens grade ähnliche überlegungen und anforderungen wie du
ich wüsste nicht, worin die Probleme bestehen solltenJedoch habe ich von Problemen mit diesem gehört oder ist die Umstellung kein Problem?
was du beachten solltest, ist, dass der nicht über die Pins vom SPI-Modul programmiert wird, sondern über andere, welche genau steht im Datenblatt( ich hab was mit UART0 in Erinnerung )
1. Gibt es Kompassmodule, die z.B. über I2C angesprochen werden können?
cmps03 bei "roboter-teile.de"
mfg pebisoft
Also... Ich habe jetzt eine Platine mit dem ATMEGA162 aufgebaut... Funktioniert (fast) alles prima!
Ich habe nur das Problem, dass irgendwas mit der Frequenz nicht stimmt...
Beim UART will einfach nicht das richtige Zeichen durchkommen, sprich am PC kommt irgendein char an und nicht das gewünschte!
Den UBBR-Wert (externer 16Mhz Quarz) hab ich nachgeschaut ist 103... Das sollte stimmen... Alles andere müsste eigentlich auch stimmen, da ich mit dem UART nie wirklich Probleme hatte!
Das einzige was mir Sorge bereitet sind die FuseBits... Ja, ich habe schon die Suchfunktion benützt, jedoch nicht viele Antworten bezüglich dem Ponyprog gesehen... Ich benutze dieses und weiss wirklich nicht so genau, wo jetzt ein Häckchen hin soll oder wo nicht. Momentan habe ich lediglich beim CK/8 und Bodlevel eines gesetzt...
Könnte mir nicht mal vielleicht jemand einen Screenshot seiner Bits für den 162er geben? Da sieht sowieso alles ein bisschen anders aus und mit dem Datenblatt gibt es bei mir nur verwirrungen
Wäre super!
Das würde erklären warum der UART nicht richtig funktioniert. Dein Controller läuft nämlich nur mit 2 MHz ( halt Clk / 8 )Zitat von surfer
Wenn du also das Häckchen bei CKDIV8 wegmachst sollte alles laufen.
EESAVE ist vielleicht noch ganz interessant wenn du mit dem Eeprom arbeitest. Damit schütz du den Inhalt des Eeproms beim neuprogrammieren des Chips.
SUT0 programmiert sollte die längste Start-up Zeit einstellen, sinnvoll wenn du ohne Brown-Out-Detection arbeitest ( siehe Seite 37 Datenblatt ).
Für BODLEVEL[2:0] wäre 101 oder 100 eine sinnvolle Einstellung ( wobei man aufpassen muss, eine 1 bedeutet kein Häckchen bei PonyProg ), das würde eine Brown-Out Detectionlevel von 2,7 Volt oder 4,3 Volt einstellen. ( siehe Seite 48 ).
Den Rest brauchst du erstmal nicht.
MfG Kjion
Aha. Danke Kjion...
Nur dummerweise habe ich das mit dem Clk/8 schon ausprobiert und dann einfach ein noch falscheres Zeichen bekommen :-P
Was ich auch komisch finde ist, dass es teilweise richtig durchkommt... wenn ich ein ´h´ sende, dann kommt einfach ´Chx´wobei x ein ASCII zeichen ist, welches als Musiknote dargestellt wird...
Ich versteh das nicht... :-P
Oje...
Womit programmierst du denn ?
Es könnte sein das der ATMega162 eine leicht andere Ansteuerung des UARTs braucht ?? Müsste ich aber erst nochmal nachschauen...
MfG Kjion
Also ich habe jetzt nochmals die FuseBits kontrolliert und sollten stimmen...
Zudem habe ich mit CKOUT die Quarzfrequenz gemessen und sie Beträgt genau 16MHz.
Nur leider will mein UART immer noch nicht! Jetzt kommen am PC gar keine Zeichen mehr an!
Ich poste mal meinen Code. Ich hoffe jemand kann mir helfen...
MerciCode:#include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/delay.h> int main(void) { DDRB=0xFF; DDRD=0x00; UBRR0H = (103>>8); UBRR0L = 103; UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0); UCSR0C = (1<<URSEL0)|(1<<UCSZ10)|(1<<UCSZ00); while(1) { UDR0='h'; } }
Lesezeichen